~wgrant/ubuntu/natty/landscape-client/natty-updates-broken

« back to all changes in this revision

Viewing changes to landscape/manager/tests/test_scriptexecution.py

  • Committer: Bazaar Package Importer
  • Author(s): Free Ekanayaka
  • Date: 2010-04-21 19:58:10 UTC
  • mfrom: (1.1.16 upstream)
  • Revision ID: james.westby@ubuntu.com-20100421195810-s30uv3s6i27lue38
Tags: 1.5.2-0ubuntu0.10.10.0
* New upstream version (LP: #594594):
  - A new includes information about active network devices and their
    IP address in sysinfo output (LP: #272344).
  - A new plugin collects information about network traffic (#LP :284662).
  - Report information about which packages requested a reboot (LP: #538253).
  - Fix breakage on Lucid AMIs having no ramdisk (LP: #574810).
  - Migrate the inter-process communication system from DBus to Twisted AMP.

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
    UBUNTU_PATH, get_user_info, UnknownInterpreterError, UnknownUserError)
14
14
from landscape.manager.manager import SUCCEEDED, FAILED
15
15
from landscape.tests.helpers import (
16
 
    LandscapeTest, LandscapeIsolatedTest, ManagerHelper,
17
 
    StubProcessFactory, DummyProcess)
 
16
    LandscapeTest, ManagerHelper, StubProcessFactory, DummyProcess)
18
17
from landscape.tests.mocker import ANY, ARGS
19
18
 
20
19
 
68
67
        return result
69
68
 
70
69
    def test_concurrent(self):
71
 
        """Scripts run with the ScriptExecutionPlugin plugin are run concurrently."""
 
70
        """
 
71
        Scripts run with the ScriptExecutionPlugin plugin are run concurrently.
 
72
        """
72
73
        fifo = self.makeFile()
73
74
        os.mkfifo(fifo)
74
75
        self.addCleanup(os.remove, fifo)
129
130
        mock_umask = self.mocker.replace("os.umask")
130
131
        mock_umask(0022)
131
132
        self.mocker.result(0077)
132
 
        mock_mkdtemp = self.mocker.replace("tempfile.mkdtemp", passthrough=False)
 
133
        mock_mkdtemp = self.mocker.replace("tempfile.mkdtemp",
 
134
                                           passthrough=False)
133
135
        mock_mkdtemp()
134
136
        self.mocker.throw(OSError("Fail!"))
135
137
        mock_umask(0077)
220
222
        script executes in '/'.
221
223
        """
222
224
        mock_getpwnam = self.mocker.replace("pwd.getpwnam", passthrough=False)
 
225
 
223
226
        class pwnam(object):
224
227
            pw_uid = 1234
225
228
            pw_gid = 5678
260
263
        for fd in (0, 1, 2):
261
264
            protocol.childConnectionLost(fd)
262
265
        protocol.processEnded(Failure(ProcessDone(0)))
 
266
 
263
267
        def check(data):
264
268
            self.assertEquals(data, "foobar")
265
269
            self.assertFalse(os.path.exists(attachment_dir))
271
275
        self.plugin.process_factory = factory
272
276
        self.plugin.size_limit = 100
273
277
        result = self.plugin.run_script("/bin/sh", "")
274
 
        result.addCallback(self.assertEquals, "x"*100)
 
278
        result.addCallback(self.assertEquals, "x" * 100)
275
279
 
276
280
        protocol = factory.spawns[0][0]
277
 
        protocol.childDataReceived(1, "x"*200)
 
281
        protocol.childDataReceived(1, "x" * 200)
278
282
        for fd in (0, 1, 2):
279
283
            protocol.childConnectionLost(fd)
280
284
        protocol.processEnded(Failure(ProcessDone(0)))
303
307
        protocol.childDataReceived(1, "hi\n")
304
308
        self.manager.reactor.advance(501)
305
309
        protocol.processEnded(Failure(ProcessDone(0)))
 
310
 
306
311
        def got_error(f):
307
312
            self.assertTrue(f.check(ProcessTimeLimitReachedError))
308
313
            self.assertEquals(f.value.data, "hi\n")
339
344
        protocol.childDataReceived(1, "hi")
340
345
        protocol.processEnded(Failure(ProcessDone(0)))
341
346
        self.manager.reactor.advance(501)
 
347
 
342
348
        def got_result(output):
343
349
            self.assertEquals(output, "hi")
344
350
        result.addCallback(got_result)
400
406
        meaningful error instead of crashing in execvpe.
401
407
        """
402
408
        d = self.plugin.run_script("/bin/cantpossiblyexist", "stuff")
 
409
 
403
410
        def cb(ignore):
404
411
            self.fail("Should not be there")
 
412
 
405
413
        def eb(failure):
406
414
            failure.trap(UnknownInterpreterError)
407
415
            self.assertEquals(
410
418
        return d.addCallback(cb).addErrback(eb)
411
419
 
412
420
 
413
 
class ScriptExecutionMessageTests(LandscapeIsolatedTest):
 
421
class ScriptExecutionMessageTests(LandscapeTest):
414
422
    helpers = [ManagerHelper]
415
423
 
416
424
    def setUp(self):
565
573
        self.manager.add(ScriptExecutionPlugin())
566
574
        self.manager.config.script_users = "landscape, nobody"
567
575
        result = self._send_script(sys.executable, "bar", user="whatever")
 
576
 
568
577
        def got_result(r):
569
578
            self.assertMessages(
570
579
                self.broker_service.message_store.get_pending_messages(),
596
605
 
597
606
        self.mocker.replay()
598
607
 
599
 
        self.manager.add(ScriptExecutionPlugin(process_factory=process_factory))
 
608
        self.manager.add(
 
609
            ScriptExecutionPlugin(process_factory=process_factory))
600
610
 
601
611
        def got_result(r):
602
612
            self.assertTrue(self.broker_service.exchanger.is_urgent())
635
645
 
636
646
        self.mocker.replay()
637
647
 
638
 
        self.manager.add(ScriptExecutionPlugin(process_factory=process_factory))
 
648
        self.manager.add(
 
649
            ScriptExecutionPlugin(process_factory=process_factory))
639
650
 
640
651
        def got_result(r):
641
652
            self.assertTrue(self.broker_service.exchanger.is_urgent())
642
 
            [message] = self.broker_service.message_store.get_pending_messages()
 
653
            [message] = (
 
654
                self.broker_service.message_store.get_pending_messages())
643
655
            self.assertEquals(
644
656
                message["result-text"],
645
657
                 u"\x7fELF\x01\x01\x01\x00\x00\x00\ufffd\x01")