File tree 2 files changed +96
-0
lines changed
2 files changed +96
-0
lines changed Original file line number Diff line number Diff line change @@ -16,6 +16,7 @@ class UdgerParser {
16
16
*/
17
17
constructor ( file ) {
18
18
this . db = new Database ( file , { readonly : true , fileMustExist : true } ) ;
19
+ this . file = file ;
19
20
this . ip = null ;
20
21
this . ua = null ;
21
22
@@ -29,6 +30,32 @@ class UdgerParser {
29
30
this . retIp = { } ;
30
31
}
31
32
33
+ /**
34
+ * Connect (reconnect) sqlite database
35
+ * @return {Boolean } true if db has been opened, false if already connected
36
+ */
37
+ connect ( ) {
38
+ if ( ! this . db ) {
39
+ this . db = new Database ( this . file , { readonly : true , fileMustExist : true } ) ;
40
+ return true ;
41
+ }
42
+ return false ;
43
+ }
44
+
45
+ /**
46
+ * Disconnect sqlite database, avoid read/write conflict
47
+ * see https://github.com/udger/udger-updater-nodejs/issues/5
48
+ * @return {Boolean } true if db has been closed, false if no db opened
49
+ */
50
+ disconnect ( ) {
51
+ if ( this . db ) {
52
+ this . db . close ( ) ;
53
+ this . db = null ;
54
+ return true ;
55
+ }
56
+ return false ;
57
+ }
58
+
32
59
/**
33
60
* Initialize User-Agent or IP(v4/v6), or both
34
61
* @param {Object } data - An object
@@ -149,6 +176,13 @@ class UdgerParser {
149
176
}
150
177
}
151
178
179
+ /**
180
+ * Clean the cache
181
+ */
182
+ cacheClean ( ) {
183
+ this . cache = { } ;
184
+ }
185
+
152
186
/**
153
187
* Parse the User-Agent string
154
188
* @param {String } ua - An User-Agent string
@@ -813,6 +847,8 @@ class UdgerParser {
813
847
*/
814
848
parse ( opts ) {
815
849
850
+ if ( ! this . db ) return { } ;
851
+
816
852
if (
817
853
this . isCacheEnable ( ) &&
818
854
this . cacheKeyExist ( this . keyCache )
Original file line number Diff line number Diff line change
1
+ const tap = require ( 'tap' ) ;
2
+ const config = require ( './lib/config' ) ;
3
+
4
+ tap . test (
5
+ 'Connect: disconnect() should return true' ,
6
+ ( t ) => {
7
+ let disconnected = config . udgerParser . disconnect ( ) ;
8
+ t . same ( disconnected , true ) ;
9
+ t . end ( ) ;
10
+ }
11
+ ) ;
12
+
13
+ tap . test (
14
+ 'Connect: disconnect() should return false (already disconnected)' ,
15
+ ( t ) => {
16
+ let disconnected = config . udgerParser . disconnect ( ) ;
17
+ t . same ( disconnected , false ) ;
18
+ t . end ( ) ;
19
+ }
20
+ ) ;
21
+
22
+ tap . test (
23
+ 'Connect: parse() should return {} because disconnected' ,
24
+ ( t ) => {
25
+ let ret = config . udgerParser . parse ( ) ;
26
+ t . same ( ret , { } ) ;
27
+ t . end ( ) ;
28
+ }
29
+ ) ;
30
+
31
+ tap . test (
32
+ 'Connect: connect() should return true' ,
33
+ ( t ) => {
34
+ let reconnected = config . udgerParser . connect ( ) ;
35
+ t . same ( reconnected , true ) ;
36
+ t . end ( ) ;
37
+ }
38
+ ) ;
39
+
40
+ tap . test (
41
+ 'Connect: connect() should return false (already connected)' ,
42
+ ( t ) => {
43
+ let reconnected = config . udgerParser . connect ( ) ;
44
+ t . same ( reconnected , false ) ;
45
+ t . end ( ) ;
46
+ }
47
+ ) ;
48
+
49
+ tap . test (
50
+ 'Connect: parse() should return an object' ,
51
+ ( t ) => {
52
+ let ret = config . udgerParser . parse ( ) ;
53
+ t . same ( ret , {
54
+ from_cache :false ,
55
+ ip_address :{ } ,
56
+ user_agent :{ }
57
+ } ) ;
58
+ t . end ( ) ;
59
+ }
60
+ ) ;
You can’t perform that action at this time.
0 commit comments