3
3
import sys
4
4
import unittest
5
5
6
+ import azure .functions as func
6
7
from tests .utils import testutils
7
8
8
9
from azure_functions_worker import protos
20
21
'deferred_bindings_tests' / \
21
22
'deferred_bindings_functions' / \
22
23
'deferred_bindings_enabled'
24
+ DEFERRED_BINDINGS_DISABLED_DIR = testutils .EXTENSION_TESTS_FOLDER / \
25
+ 'deferred_bindings_tests' / \
26
+ 'deferred_bindings_functions' / \
27
+ 'deferred_bindings_disabled'
28
+ DEFERRED_BINDINGS_ENABLED_DUAL_DIR = testutils .EXTENSION_TESTS_FOLDER / \
29
+ 'deferred_bindings_tests' / \
30
+ 'deferred_bindings_functions' / \
31
+ 'deferred_bindings_enabled_dual'
23
32
24
33
25
34
class MockMBD :
@@ -35,6 +44,7 @@ def __init__(self, version: str, source: str,
35
44
"is only supported for 3.9+." )
36
45
class TestDeferredBindingsEnabled (testutils .AsyncTestCase ):
37
46
47
+ @testutils .retryable_test (3 , 5 )
38
48
async def test_deferred_bindings_enabled_metadata (self ):
39
49
async with testutils .start_mockhost (
40
50
script_root = DEFERRED_BINDINGS_ENABLED_DIR ) as host :
@@ -43,7 +53,9 @@ async def test_deferred_bindings_enabled_metadata(self):
43
53
self .assertIsInstance (r .response , protos .FunctionMetadataResponse )
44
54
self .assertEqual (r .response .result .status ,
45
55
protos .StatusResult .Success )
56
+ del sys .modules ['function_app' ]
46
57
58
+ @testutils .retryable_test (3 , 5 )
47
59
async def test_deferred_bindings_enabled_log (self ):
48
60
async with testutils .start_mockhost (
49
61
script_root = DEFERRED_BINDINGS_ENABLED_DIR ) as host :
@@ -56,11 +68,74 @@ async def test_deferred_bindings_enabled_log(self):
56
68
enabled_log_present = True
57
69
break
58
70
self .assertTrue (enabled_log_present )
71
+ del sys .modules ['function_app' ]
72
+
73
+
74
+ @unittest .skipIf (sys .version_info .minor <= 8 , "The base extension"
75
+ "is only supported for 3.9+." )
76
+ class TestDeferredBindingsDisabled (testutils .AsyncTestCase ):
77
+
78
+ @testutils .retryable_test (3 , 5 )
79
+ async def test_deferred_bindings_disabled_metadata (self ):
80
+ async with testutils .start_mockhost (
81
+ script_root = DEFERRED_BINDINGS_DISABLED_DIR ) as host :
82
+ await host .init_worker ()
83
+ r = await host .get_functions_metadata ()
84
+ self .assertIsInstance (r .response , protos .FunctionMetadataResponse )
85
+ self .assertEqual (r .response .result .status ,
86
+ protos .StatusResult .Success )
87
+ del sys .modules ['function_app' ]
88
+
89
+ @testutils .retryable_test (3 , 5 )
90
+ async def test_deferred_bindings_disabled_log (self ):
91
+ async with testutils .start_mockhost (
92
+ script_root = DEFERRED_BINDINGS_DISABLED_DIR ) as host :
93
+ await host .init_worker ()
94
+ r = await host .get_functions_metadata ()
95
+ disabled_log_present = False
96
+ for log in r .logs :
97
+ message = log .message
98
+ if "Deferred bindings enabled: False" in message :
99
+ disabled_log_present = True
100
+ break
101
+ self .assertTrue (disabled_log_present )
102
+ del sys .modules ['function_app' ]
103
+
104
+
105
+ @unittest .skipIf (sys .version_info .minor <= 8 , "The base extension"
106
+ "is only supported for 3.9+." )
107
+ class TestDeferredBindingsEnabledDual (testutils .AsyncTestCase ):
108
+
109
+ @testutils .retryable_test (3 , 5 )
110
+ async def test_deferred_bindings_dual_metadata (self ):
111
+ async with testutils .start_mockhost (
112
+ script_root = DEFERRED_BINDINGS_ENABLED_DUAL_DIR ) as host :
113
+ await host .init_worker ()
114
+ r = await host .get_functions_metadata ()
115
+ self .assertIsInstance (r .response , protos .FunctionMetadataResponse )
116
+ self .assertEqual (r .response .result .status ,
117
+ protos .StatusResult .Success )
118
+ del sys .modules ['function_app' ]
119
+
120
+ @testutils .retryable_test (3 , 5 )
121
+ async def test_deferred_bindings_dual_enabled_log (self ):
122
+ async with testutils .start_mockhost (
123
+ script_root = DEFERRED_BINDINGS_ENABLED_DUAL_DIR ) as host :
124
+ await host .init_worker ()
125
+ r = await host .get_functions_metadata ()
126
+ enabled_log_present = False
127
+ for log in r .logs :
128
+ message = log .message
129
+ if "Deferred bindings enabled: True" in message :
130
+ enabled_log_present = True
131
+ break
132
+ self .assertTrue (enabled_log_present )
133
+ del sys .modules ['function_app' ]
59
134
60
135
61
136
@unittest .skipIf (sys .version_info .minor <= 8 , "The base extension"
62
137
"is only supported for 3.9+." )
63
- class TestDeferredBindingsEnabledHelpers (testutils .AsyncTestCase ):
138
+ class TestDeferredBindingsHelpers (testutils .AsyncTestCase ):
64
139
65
140
def test_deferred_bindings_enabled_decode (self ):
66
141
binding = BlobClientConverter
@@ -92,27 +167,31 @@ async def test_check_deferred_bindings_enabled(self):
92
167
93
168
The second represents if the current binding is deferred binding. If this is
94
169
True, then deferred bindings must also be enabled at the function level.
95
-
96
- Test type 1: type is supported, deferred_bindings_enabled is not yet set
97
- Test type 2: type is supported, deferred_bindings_enabled is already set
98
170
"""
99
171
async with testutils .start_mockhost (
100
172
script_root = DEFERRED_BINDINGS_ENABLED_DIR ) as host :
101
173
await host .init_worker ()
102
- self .assertEqual (meta .check_deferred_bindings_enabled (
103
- BlobClient , False ), (True , True ))
104
174
175
+ # Type is not supported, deferred_bindings_enabled is not yet set
105
176
self .assertEqual (meta .check_deferred_bindings_enabled (
106
- BlobClient , True ), (True , True ))
177
+ func . InputStream , False ), (False , False ))
107
178
179
+ # Type is not supported, deferred_bindings_enabled already set
108
180
self .assertEqual (meta .check_deferred_bindings_enabled (
109
- ContainerClient , False ), (True , True ))
181
+ func . InputStream , True ), (True , False ))
110
182
183
+ # Type is supported, deferred_bindings_enabled is not yet set
111
184
self .assertEqual (meta .check_deferred_bindings_enabled (
112
- ContainerClient , True ), (True , True ))
113
-
185
+ BlobClient , False ), (True , True ))
186
+ self .assertEqual (meta .check_deferred_bindings_enabled (
187
+ ContainerClient , False ), (True , True ))
114
188
self .assertEqual (meta .check_deferred_bindings_enabled (
115
189
StorageStreamDownloader , False ), (True , True ))
116
190
191
+ # Type is supported, deferred_bindings_enabled is already set
192
+ self .assertEqual (meta .check_deferred_bindings_enabled (
193
+ BlobClient , True ), (True , True ))
194
+ self .assertEqual (meta .check_deferred_bindings_enabled (
195
+ ContainerClient , True ), (True , True ))
117
196
self .assertEqual (meta .check_deferred_bindings_enabled (
118
197
StorageStreamDownloader , True ), (True , True ))
0 commit comments