~maas-committers/maas/trunk

« back to all changes in this revision

Viewing changes to src/provisioningserver/drivers/power/tests/test_amt.py

  • Committer: MAAS Lander
  • Author(s): Gavin Panella
  • Date: 2016-04-15 19:29:41 UTC
  • mfrom: (4924.1.1 xml-as-bytes--bug-1570609)
  • Revision ID: maas_lander-20160415192941-mv38gz7k4fz8ds3a
[r=mpontillo,andreserl][bug=1570609][author=allenap] Use @typed to untangle bytes/str problems in the AMT driver.

This ensures that XML output from wsman is parsed as bytes directly from source without any intermediate conversions.

Show diffs side-by-side

added added

removed removed

Lines of Context:
149
149
    def test__run_runs_command(self):
150
150
        amt_power_driver = AMTPowerDriver()
151
151
        amt_power_driver.env = None
152
 
        command = factory.make_name('command')
 
152
        command = factory.make_name('command'),
153
153
        power_pass = factory.make_name('power_pass')
154
154
        stdin = factory.make_name('stdin').encode('utf-8')
155
155
        popen_mock = self.patch_popen(return_value=(b'stdout', b''))
157
157
        result = amt_power_driver._run(
158
158
            command, power_pass, stdin)
159
159
 
160
 
        self.expectThat(popen_mock.communicate, MockCalledOnceWith(
161
 
            stdin))
162
 
        self.expectThat(result, Equals('stdout'))
 
160
        self.expectThat(popen_mock.communicate, MockCalledOnceWith(stdin))
 
161
        self.expectThat(result, Equals(b'stdout'))
163
162
 
164
163
    def test__run_raises_power_action_error(self):
165
164
        amt_power_driver = AMTPowerDriver()
167
166
            return_value=(b'', b''), returncode=1)
168
167
 
169
168
        self.assertRaises(
170
 
            PowerActionError, amt_power_driver._run, None, None, None)
 
169
            PowerActionError, amt_power_driver._run, (),
 
170
            factory.make_name("power-pass"), None)
171
171
 
172
172
    def test__issue_amttool_command_calls__run(self):
173
173
        amt_power_driver = AMTPowerDriver()
176
176
        amttool_boot_mode = factory.make_name('amttool_boot_mode')
177
177
        stdin = factory.make_name('stdin').encode('utf-8')
178
178
        cmd = choice(['power-cycle', 'powerup'])
179
 
        command = (
180
 
            'amttool', ip_address,
181
 
            cmd, amttool_boot_mode)
 
179
        command = 'amttool', ip_address, cmd, amttool_boot_mode
182
180
        _run_mock = self.patch(amt_power_driver, '_run')
183
 
        _run_mock.return_value = 'output'
 
181
        _run_mock.return_value = b'output'
184
182
 
185
183
        result = amt_power_driver._issue_amttool_command(
186
184
            cmd, ip_address, power_pass,
188
186
 
189
187
        self.expectThat(
190
188
            _run_mock, MockCalledOnceWith(command, power_pass, stdin=stdin))
191
 
        self.expectThat(result, Equals('output'))
 
189
        self.expectThat(result, Equals(b'output'))
192
190
 
193
191
    def test__issue_wsman_command_calls__run_for_power(self):
194
192
        amt_power_driver = AMTPowerDriver()
241
239
            'wsman', 'enumerate', wsman_query_schema_uri
242
240
        ) + wsman_query_opts
243
241
        _run_mock = self.patch(amt_power_driver, '_run')
 
242
        _run_mock.return_value = b'ignored'
244
243
 
245
244
        amt_power_driver._issue_wsman_command('query', ip_address, power_pass)
246
245
 
254
253
        _issue_amttool_command_mock = self.patch(
255
254
            amt_power_driver, '_issue_amttool_command')
256
255
        _issue_amttool_command_mock.return_value = (
257
 
            AMTTOOL_OUTPUT % (b'', b'S0')).decode("utf-8")
 
256
            AMTTOOL_OUTPUT % (b'', b'S0'))
258
257
 
259
258
        result = amt_power_driver.amttool_query_state(ip_address, power_pass)
260
259
 
270
269
        _issue_amttool_command_mock = self.patch(
271
270
            amt_power_driver, '_issue_amttool_command')
272
271
        _issue_amttool_command_mock.return_value = (
273
 
            AMTTOOL_OUTPUT % (b'', b'S5 (soft-off)')).decode("utf-8")
 
272
            AMTTOOL_OUTPUT % (b'', b'S5 (soft-off)'))
274
273
 
275
274
        result = amt_power_driver.amttool_query_state(ip_address, power_pass)
276
275
 
287
286
        _issue_amttool_command_mock = self.patch(
288
287
            amt_power_driver, '_issue_amttool_command')
289
288
        _issue_amttool_command_mock.return_value = (
290
 
            AMTTOOL_OUTPUT % (b'', b'error')).decode("utf-8")
 
289
            AMTTOOL_OUTPUT % (b'', b'error'))
291
290
 
292
291
        self.assertRaises(
293
292
            PowerActionError, amt_power_driver.amttool_query_state,