@@ -180,6 +180,60 @@ describe('trust-on-first-use', function() {
180
180
done ( ) ;
181
181
} ) ;
182
182
} ) ;
183
+
184
+ it ( 'should not duplicate fingerprint entries' , function ( done ) {
185
+ // Assuming we only run this test on NodeJS with TOFU support
186
+ if ( ! hasFeature ( "trust_on_first_use" ) ) {
187
+ done ( ) ;
188
+ return ;
189
+ }
190
+
191
+ // Given
192
+ var knownHostsPath = "build/known_hosts" ;
193
+ if ( fs . existsSync ( knownHostsPath ) ) {
194
+ fs . unlinkSync ( knownHostsPath ) ;
195
+ }
196
+ fs . writeFileSync ( knownHostsPath , '' ) ;
197
+
198
+ driver = neo4j . driver ( "bolt://localhost" , neo4j . auth . basic ( "neo4j" , "neo4j" ) , {
199
+ encrypted : true ,
200
+ trust : "TRUST_ON_FIRST_USE" ,
201
+ knownHosts : knownHostsPath
202
+ } ) ;
203
+
204
+ // When
205
+ driver . session ( ) ;
206
+ driver . session ( ) ;
207
+
208
+ // Then
209
+ setTimeout ( function ( ) {
210
+ var lines = { } ;
211
+ fs . readFileSync ( knownHostsPath , 'utf8' )
212
+ . split ( '\n' )
213
+ . filter ( function ( line ) {
214
+ return ! ! ( line . trim ( ) ) ;
215
+ } )
216
+ . forEach ( function ( line ) {
217
+ if ( ! lines [ line ] ) {
218
+ lines [ line ] = 0 ;
219
+ }
220
+ lines [ line ] ++ ;
221
+ } ) ;
222
+
223
+ var duplicatedLines = Object
224
+ . keys ( lines )
225
+ . map ( function ( line ) {
226
+ return lines [ line ] ;
227
+ } )
228
+ . filter ( function ( count ) {
229
+ return count > 1 ;
230
+ } )
231
+ . length ;
232
+
233
+ expect ( duplicatedLines ) . toBe ( 0 ) ;
234
+ done ( ) ;
235
+ } , 1000 ) ;
236
+ } ) ;
183
237
184
238
it ( 'should should give helpful error if database cert does not match stored certificate' , function ( done ) {
185
239
// Assuming we only run this test on NodeJS with TOFU support
0 commit comments