1
1
from datalake_ingester import DynamoDBStorage
2
2
from decimal import Decimal
3
- import boto3
3
+
4
+
5
+ def test_dynamodb_store (dynamodb_users_table , dynamodb_connection ):
6
+ storage = DynamoDBStorage ('users' , connection = dynamodb_connection )
7
+ expected_user = {'name' : 'John' , 'last_name' : 'Muir' }
8
+ storage .store (expected_user )
9
+ user = dict (dynamodb_users_table .get_item (name = 'John' , last_name = 'Muir' ))
10
+ assert dict (user ) == expected_user
11
+
12
+ def test_store_duplicate (dynamodb_users_table , dynamodb_connection ):
13
+ storage = DynamoDBStorage ('users' , connection = dynamodb_connection )
14
+ expected_user = {'name' : 'Vanilla' , 'last_name' : 'Ice' }
15
+ storage .store (expected_user )
16
+ storage .store (expected_user )
17
+ user = dict (dynamodb_users_table .get_item (name = 'Vanilla' , last_name = 'Ice' ))
18
+ assert dict (user ) == expected_user
4
19
5
20
def test_insert_new_record (dynamodb_latest_table , dynamodb_connection ):
6
- boto3 . setup_default_session ( fake_credentials = True )
7
- storage = DynamoDBStorage ( 'latest' , connection = dynamodb_connection )
21
+ storage = DynamoDBStorage ( latest_table = 'latest' , connection = dynamodb_connection )
22
+
8
23
new_record = {
9
24
'time_index_key' : '15225:newlog' ,
10
25
'range_key' : 'new_server:12345abcde' ,
11
26
'metadata' : {
12
- 'start' : 1500000000000
27
+ 'version' : 1 ,
28
+ 'start' : 1500000000000 ,
29
+ 'end' : 1500000000010 ,
30
+ 'path' : '/var/log/syslog.2' ,
31
+ 'work_id' : None ,
32
+ 'where' : 'ground_server2' ,
33
+ 'what' : 'syslog' ,
34
+ 'id' : '34fb2d1ec54245c7a57e29ed5a6ea9b2' ,
35
+ 'hash' : 'b4f2d8de24af342643d5b78a8f2b9b88'
13
36
},
14
37
'url' : 's3://newfile/url' ,
15
38
'create_time' : 1500000000000
16
39
}
17
40
18
- storage .store_latest (new_record )
41
+ try :
42
+ storage .store_latest (new_record )
43
+ except Exception as e :
44
+ print (f"Failed to store record: { str (e )} " )
19
45
20
46
stored_record = dynamodb_latest_table .get_item (
21
47
time_index_key = '15225:newlog' ,
@@ -25,13 +51,21 @@ def test_insert_new_record(dynamodb_latest_table, dynamodb_connection):
25
51
26
52
27
53
def test_store_conditional_put_latest_multiple_files (dynamodb_latest_table , dynamodb_connection ):
28
- storage = DynamoDBStorage ('latest' , connection = dynamodb_connection )
54
+ storage = DynamoDBStorage (latest_table = 'latest' , connection = dynamodb_connection )
29
55
30
56
file1 = {
31
57
'time_index_key' : '15219:zlcdzvawsp' ,
32
58
'range_key' : 'lawvuunyws:447a4a801cabc6089f04922abdfa8aad099824e9' ,
33
59
'metadata' : {
34
- 'start' : 1314877177402
60
+ 'version' : 1 ,
61
+ 'start' : 1314877177402 ,
62
+ 'end' : 1314877177412 , # ends ten seconds later
63
+ 'path' : '/var/log/syslog.2' ,
64
+ 'work_id' : 'abc-123' ,
65
+ 'where' : 'ground_server2' ,
66
+ 'what' : 'syslog' ,
67
+ 'id' : '34fb2d1ec54245c7a57e29ed5a6ea9b2' ,
68
+ 'hash' : 'b4f2d8de24af342643d5b78a8f2b9b88'
35
69
},
36
70
'url' : 's3://existingfile/url' ,
37
71
'create_time' : 1314877177402
@@ -41,7 +75,16 @@ def test_store_conditional_put_latest_multiple_files(dynamodb_latest_table, dyna
41
75
'time_index_key' : '15219:zlcdzvawsp' ,
42
76
'range_key' : 'lawvuunyws:447a4a801cabc6089f04922abdfa8aad099824e9' ,
43
77
'metadata' : {
44
- 'start' : 1314877177403 # One millisecond later
78
+ 'version' : 1 ,
79
+ 'start' : 1314877177413 , # One millisecond later
80
+ 'end' : 1314877177423 , # ends ten seconds later
81
+ 'path' : '/var/log/syslog.2' ,
82
+ 'work_id' : 'abc-123' ,
83
+ 'where' : 'ground_server2' ,
84
+ 'what' : 'syslog' ,
85
+ 'id' : '45gb2d1ec54245c7a57e29ed5a6ea9b2' ,
86
+ 'hash' : 'c5g3d8de24af342643d5b78a8f2b9b88'
87
+
45
88
},
46
89
'url' : 's3://existingfile/url' ,
47
90
'create_time' : 1314877177403
@@ -55,7 +98,7 @@ def test_store_conditional_put_latest_multiple_files(dynamodb_latest_table, dyna
55
98
'start' : 1414877177402 ,
56
99
'end' : 1415128740728 ,
57
100
'path' : '/var/log/syslog.2' ,
58
- 'work_id' : None ,
101
+ 'work_id' : 'foo-bizz' ,
59
102
'where' : 'ground_server2' ,
60
103
'what' : 'syslog' ,
61
104
'id' : '34fb2d1ec54245c7a57e29ed5a6ea9b2' ,
@@ -74,24 +117,32 @@ def test_store_conditional_put_latest_multiple_files(dynamodb_latest_table, dyna
74
117
75
118
res = dict (dynamodb_latest_table .get_item (time_index_key = '15219:zlcdzvawsp' ,
76
119
range_key = 'lawvuunyws:447a4a801cabc6089f04922abdfa8aad099824e9' ))
77
- assert res ['metadata' ]['start' ] == Decimal ('1314877177403 ' )
120
+ assert res ['metadata' ]['start' ] == Decimal ('1314877177413 ' )
78
121
assert len (records ) == 2
79
122
assert file2 == res
80
123
81
124
82
125
def test_concurrent_updates (dynamodb_latest_table , dynamodb_connection ):
83
- storage = DynamoDBStorage ('latest' , connection = dynamodb_connection )
126
+ storage = DynamoDBStorage (latest_table = 'latest' , connection = dynamodb_connection )
84
127
85
128
base_record = {
86
129
'time_index_key' : '15219:zlcdzvawsp' ,
87
130
'range_key' : 'lawvuunyws:447a4a801cabc6089f04922abdfa8aad099824e9' ,
88
131
'metadata' : {
89
- 'start' : 1314877177402
132
+ 'version' : 1 ,
133
+ 'start' : 1314877177402 ,
134
+ 'end' : 1314877177412 , # ends ten seconds later
135
+ 'path' : '/var/log/syslog.2' ,
136
+ 'work_id' : 'abc-123' ,
137
+ 'where' : 'ground_server2' ,
138
+ 'what' : 'syslog' ,
139
+ 'id' : '34fb2d1ec54245c7a57e29ed5a6ea9b2' ,
140
+ 'hash' : 'b4f2d8de24af342643d5b78a8f2b9b88'
90
141
},
91
142
'url' : 's3://existingfile/url' ,
92
143
'create_time' : 1314877177402
93
144
}
94
- storage .store (base_record )
145
+ storage .store_latest (base_record )
95
146
96
147
97
148
updated_record1 = base_record .copy ()
0 commit comments