79
79
"disableCommand": "echo 'disable'",
82
man = ext.HandlerManifest(manJson)
84
def MockLoadManifest(self):
87
MockLaunchCommand = MockFunc()
88
MockSetHandlerStatus = MockFunc()
90
def MockDownload(self):
91
fileutil.CreateDir(self.getBaseDir())
92
fileutil.SetFileContents(self.getManifestFile(), json.dumps(manJson))
82
manifest_sample = ext.HandlerManifest(manifest_sample_str)
87
"timestampUTC": "2015-11-12T06:59:48Z",
89
"name": "<Handler workload name>",
90
"operation": "<name of the operation being performed>",
91
"configurationAppliedTime": "2015-11-12T06:59:48Z",
96
"message": "formatted user message"
99
"name": "<Handler workload subcomponent name>",
102
"formattedMessage": {
103
"lang": "lang[-locale]",
104
"message": "formatted user message"
113
ext_status_sample_min="""
116
"timestampUTC": "2015-11-12T06:59:48Z",
123
def mock_load_manifest(self):
124
return manifest_sample
126
mock_launch_command = MockFunc()
127
mock_set_state = MockFunc()
129
def mock_download(self):
130
fileutil.mkdir(self.get_base_dir())
131
fileutil.write_file(self.get_manifest_file(), json.dumps(manifest_sample_str))
94
133
#logger.LoggerInit("/dev/null", "/dev/stdout")
95
134
class TestExtensions(unittest.TestCase):
97
136
def test_load_ext(self):
98
libDir = OSUtil.GetLibDir()
99
testExt1 = os.path.join(libDir, 'TestExt-1.0')
100
testExt2 = os.path.join(libDir, 'TestExt-2.0')
101
testExt2 = os.path.join(libDir, 'TestExt-2.1')
102
for path in [testExt1, testExt2]:
137
libDir = OSUTIL.get_lib_dir()
138
test_ext1 = os.path.join(libDir, 'TestExt-1.0')
139
test_ext2 = os.path.join(libDir, 'TestExt-2.0')
140
test_ext2 = os.path.join(libDir, 'TestExt-2.1')
141
for path in [test_ext1, test_ext2]:
103
142
if not os.path.isdir(path):
105
testExt = ext.GetInstalledExtensionVersion('TestExt')
106
self.assertEqual('2.1', testExt)
144
test_ext = ext.get_installed_version('TestExt')
145
self.assertEqual('2.1', test_ext)
108
147
def test_getters(self):
109
testExt = ext.ExtensionInstance(extension, packageList,
110
extension.properties.version, False)
111
self.assertEqual("/tmp/TestExt-2.0", testExt.getBaseDir())
112
self.assertEqual("/tmp/TestExt-2.0/status", testExt.getStatusDir())
148
test_ext = ext.ExtHandlerInstance(ext_sample, pkg_list_sample,
149
ext_sample.properties.version, False)
150
self.assertEqual("/tmp/TestExt-2.0", test_ext.get_base_dir())
151
self.assertEqual("/tmp/TestExt-2.0/status", test_ext.get_status_dir())
113
152
self.assertEqual("/tmp/TestExt-2.0/status/0.status",
114
testExt.getStatusFile())
115
self.assertEqual("/tmp/TestExt-2.0/config/HandlerState",
116
testExt.getHandlerStateFile())
117
self.assertEqual("/tmp/TestExt-2.0/config", testExt.getConfigDir())
153
test_ext.get_status_file())
154
self.assertEqual("/tmp/handler_state/TestExt-2.0/0.state",
155
test_ext.get_handler_state_file())
156
self.assertEqual("/tmp/handler_state/TestExt-2.0/0.error",
157
test_ext.get_handler_state_err_file())
158
self.assertEqual("/tmp/TestExt-2.0/config", test_ext.get_conf_dir())
118
159
self.assertEqual("/tmp/TestExt-2.0/config/0.settings",
119
testExt.getSettingsFile())
160
test_ext.get_settings_file())
120
161
self.assertEqual("/tmp/TestExt-2.0/heartbeat.log",
121
testExt.getHeartbeatFile())
162
test_ext.get_heartbeat_file())
122
163
self.assertEqual("/tmp/TestExt-2.0/HandlerManifest.json",
123
testExt.getManifestFile())
164
test_ext.get_manifest_file())
124
165
self.assertEqual("/tmp/TestExt-2.0/HandlerEnvironment.json",
125
testExt.getEnvironmentFile())
126
self.assertEqual("/tmp/log/TestExt/2.0", testExt.getLogDir())
166
test_ext.get_env_file())
167
self.assertEqual("/tmp/log/TestExt/2.0", test_ext.get_log_dir())
128
testExt = ext.ExtensionInstance(extension, packageList, "2.1", False)
129
self.assertEqual("/tmp/TestExt-2.1", testExt.getBaseDir())
130
self.assertEqual("2.1", testExt.getTargetVersion())
169
test_ext = ext.ExtHandlerInstance(ext_sample, pkg_list_sample,
171
self.assertEqual("/tmp/TestExt-2.1", test_ext.get_base_dir())
172
self.assertEqual("2.1", test_ext.get_target_version())
132
@Mockup(ext.ExtensionInstance, 'loadManifest', MockLoadManifest)
133
@Mockup(ext.ExtensionInstance, 'launchCommand', MockLaunchCommand)
134
@Mockup(ext.ExtensionInstance, 'setHandlerStatus', MockSetHandlerStatus)
174
@mock(ext.ExtHandlerInstance, 'load_manifest', mock_load_manifest)
175
@mock(ext.ExtHandlerInstance, 'launch_command', mock_launch_command)
176
@mock(ext.ExtHandlerInstance, 'set_state', mock_set_state)
135
177
def test_handle_uninstall(self):
136
MockLaunchCommand.args = None
137
MockSetHandlerStatus.args = None
138
testExt = ext.ExtensionInstance(extension, packageList,
139
extension.properties.version, False)
140
testExt.handleUninstall()
141
self.assertEqual(None, MockLaunchCommand.args)
142
self.assertEqual(None, MockSetHandlerStatus.args)
143
self.assertEqual(None, testExt.getCurrOperation())
145
testExt = ext.ExtensionInstance(extension, packageList,
146
extension.properties.version, True)
147
testExt.handleUninstall()
148
self.assertEqual(man.getUninstallCommand(), MockLaunchCommand.args[0])
149
self.assertEqual("UnInstall", testExt.getCurrOperation())
150
self.assertEqual("NotReady", MockSetHandlerStatus.args[0])
152
@Mockup(ext.ExtensionInstance, 'loadManifest', MockLoadManifest)
153
@Mockup(ext.ExtensionInstance, 'launchCommand', MockLaunchCommand)
154
@Mockup(ext.ExtensionInstance, 'download', MockDownload)
155
@Mockup(ext.ExtensionInstance, 'getHandlerStatus', MockFunc(retval="enabled"))
156
@Mockup(ext.ExtensionInstance, 'setHandlerStatus', MockSetHandlerStatus)
157
def test_handle(self):
178
mock_launch_command.args = None
179
mock_set_state.args = None
180
test_ext = ext.ExtHandlerInstance(ext_sample, pkg_list_sample,
181
ext_sample.properties.version, False)
182
if not os.path.isdir(test_ext.get_base_dir()):
183
os.makedirs(test_ext.get_base_dir())
184
test_ext.handle_uninstall()
185
self.assertEqual(None, mock_launch_command.args)
186
self.assertEqual(None, mock_set_state.args)
188
test_ext = ext.ExtHandlerInstance(ext_sample, pkg_list_sample,
189
ext_sample.properties.version, True)
190
if not os.path.isdir(test_ext.get_base_dir()):
191
os.makedirs(test_ext.get_base_dir())
192
test_ext.handle_uninstall()
193
self.assertEqual(manifest_sample.get_uninstall_command(),
194
mock_launch_command.args[0])
196
@mock(ext.ExtHandlerInstance, 'upgrade', MockFunc())
197
@mock(ext.ExtHandlerInstance, 'enable', MockFunc())
198
@mock(ext.ExtHandlerInstance, 'download', MockFunc())
199
@mock(ext.ExtHandlerInstance, 'init_dir', MockFunc())
200
@mock(ext.ExtHandlerInstance, 'install', MockFunc())
201
def test_handle_enable(self):
159
testExt = ext.ExtensionInstance(extension, packageList,
160
extension.properties.version, False)
162
self.assertEqual(1, len(testExt.logger.appenders) - len(logger.DefaultLogger.appenders))
203
test_ext = ext.ExtHandlerInstance(ext_sample, pkg_list_sample,
204
ext_sample.properties.version, False)
205
test_ext.handle_enable()
166
testExt = ext.ExtensionInstance(extension, packageList,
167
extension.properties.version, False)
169
self.assertEqual(1, len(testExt.logger.appenders) - len(logger.DefaultLogger.appenders))
208
test_ext = ext.ExtHandlerInstance(ext_sample, pkg_list_sample,
210
test_ext.handle_enable()
172
212
def test_status_convert(self):
173
extStatus = json.loads('[{"status": {"status": "success", "formattedMessage": {"lang": "en-US", "message": "Script is finished"}, "operation": "Enable", "code": "0", "name": "Microsoft.OSTCExtensions.CustomScriptForLinux"}, "version": "1.0", "timestampUTC": "2015-06-27T08:34:50Z"}]')
174
ext.extension_status_to_v2(extStatus[0], 0)
213
data = json.loads(ext_status_sample)
214
ext_status = prot.ExtensionStatus()
215
ext.parse_ext_status(ext_status, data)
217
data = json.loads(ext_status_sample_min)
218
ext_status = prot.ExtensionStatus()
219
ext.parse_ext_status(ext_status, data)
177
222
if __name__ == '__main__':