-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheventbarrier_test.py
125 lines (99 loc) · 3.66 KB
/
eventbarrier_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import unittest.mock
import botocore.session
from botocore.stub import Stubber
import eventbarrier as lambda_function
def s3_client_stubs(s3bucket_name, object_keys: list):
get_head_response = {}
s3_client = botocore.session.get_session().create_client('s3')
stubber = Stubber(s3_client)
for object_key in object_keys:
expected_params = {
"Bucket": s3bucket_name,
"Key": object_key
}
stubber.add_response('head_object', get_head_response, expected_params)
stubber.add_client_error('head_object',
service_error_code='NoSuchObject',
service_message='The specified object does not exist.',
http_status_code=400,
service_error_meta=None,
expected_params=None,
response_meta=None)
stubber.activate()
return s3_client
def s3_client_stub(s3bucket_name, object_key):
get_head_response = {}
expected_params = {
"Bucket": s3bucket_name,
"Key": object_key
}
s3_client = botocore.session.get_session().create_client('s3')
stubber = Stubber(s3_client)
stubber.add_response('head_object', get_head_response, expected_params)
stubber.add_client_error('head_object',
service_error_code='NoSuchObject',
service_message='The specified object does not exist.',
http_status_code=400,
service_error_meta=None,
expected_params=None,
response_meta=None)
stubber.activate()
return s3_client
def get_object_key_from_event():
return event['Records'][0]['s3']['object']['key']
s3bucket_name = 'eventbarrier'
context = {'requestid': '1234'}
event = \
{
"Records": [
{
"s3": {
"bucket": {
"name": "example-bucket"
},
"object": {
"key": "2/0/file1.txt",
}
}
}
]
}
class Test(unittest.TestCase):
def test_s3_stub(self):
# assemble
object_key = get_object_key_from_event()
expected_params = {
"Bucket": s3bucket_name,
"Key": object_key
}
s3_client = s3_client_stub(s3bucket_name, object_key)
# act
response = s3_client.head_object(Bucket=s3bucket_name, Key=object_key)
# assert
assert response == {}
try:
response = s3_client.head_object(Bucket=s3bucket_name, Key=object_key)
except Exception as e:
print(e)
print(response)
def test_eventbarrier_when_all_files_exist(self):
# assemble
s3_target_object_keys = ["2/0/file1.txt", "2/1/file1.txt", "2/2/file1.txt"]
s3_client = s3_client_stubs(s3bucket_name, s3_target_object_keys)
# act
lambda_function.set_s3_client(s3_client)
result = lambda_function.lambda_handler(event, context)
# assert
assert result
def test_eventbarrier_when_last_file_does_not_exist(self):
# assemble
s3_target_object_keys = ["2/0/file1.txt", "2/1/file1.txt", "2/2/file1.txt"]
s3_target_object_keys.pop()
s3_client = s3_client_stubs(s3bucket_name, s3_target_object_keys)
# act
lambda_function.set_s3_client(s3_client)
result = lambda_function.lambda_handler(event, context)
# assert
assert not result
if __name__ == '__main__':
unittest.main()