Exemplo n.º 1
0
    def test_timeout(self):
        st = time.time()

        self.stack = self.create_stack()

        # Avoid the stack create exercising the timeout code at the same time
        self.m.StubOutWithMock(self.stack, 'timeout_secs')
        self.stack.timeout_secs().MultipleTimes().AndReturn(None)

        self.m.StubOutWithMock(scheduler, 'wallclock')

        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.001)
        scheduler.wallclock().AndReturn(st + 0.1)
        wc.HeatWaitConditionHandle.get_status().AndReturn([])
        scheduler.wallclock().AndReturn(st + 4.1)
        wc.HeatWaitConditionHandle.get_status().AndReturn([])
        scheduler.wallclock().AndReturn(st + 5.1)

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack['wait_condition']

        self.assertEqual((rsrc.CREATE, rsrc.FAILED), rsrc.state)
        reason = rsrc.status_reason
        self.assertTrue(reason.startswith('WaitConditionTimeout:'))

        self.m.VerifyAll()
Exemplo n.º 2
0
    def test_timeout(self):
        st = time.time()

        self.stack = self.create_stack()

        self.m.StubOutWithMock(scheduler, 'wallclock')

        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.001)
        scheduler.wallclock().AndReturn(st + 0.1)
        wc.WaitConditionHandle.get_status().AndReturn([])
        scheduler.TaskRunner._sleep(mox.IsA(int)).AndReturn(None)
        scheduler.wallclock().AndReturn(st + 4.1)
        wc.WaitConditionHandle.get_status().AndReturn([])
        scheduler.TaskRunner._sleep(mox.IsA(int)).AndReturn(None)
        scheduler.wallclock().AndReturn(st + 5.1)

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack.resources['WaitForTheHandle']

        self.assertEqual(rsrc.state, rsrc.CREATE_FAILED)
        reason = rsrc.state_description
        self.assertTrue(reason.startswith('WaitConditionTimeout:'))

        self.assertRaises(resource.UpdateReplace,
                          rsrc.handle_update, {}, {}, {})
        self.m.VerifyAll()
Exemplo n.º 3
0
    def test_timeout(self):
        st = time.time()

        self.stack = self.create_stack()

        # Avoid the stack create exercising the timeout code at the same time
        self.m.StubOutWithMock(self.stack, 'timeout_secs')
        self.stack.timeout_secs().MultipleTimes().AndReturn(None)

        self.m.StubOutWithMock(scheduler, 'wallclock')

        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.001)
        scheduler.wallclock().AndReturn(st + 0.1)
        wc.WaitConditionHandle.get_status().AndReturn([])
        scheduler.wallclock().AndReturn(st + 4.1)
        wc.WaitConditionHandle.get_status().AndReturn([])
        scheduler.wallclock().AndReturn(st + 5.1)

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack['WaitForTheHandle']

        self.assertEqual((rsrc.CREATE, rsrc.FAILED), rsrc.state)
        reason = rsrc.status_reason
        self.assertTrue(reason.startswith('WaitConditionTimeout:'))

        self.m.VerifyAll()
Exemplo n.º 4
0
    def test_timeout(self):
        st = time.time()

        self.stack = self.create_stack()

        # Avoid the stack create exercising the timeout code at the same time
        self.m.StubOutWithMock(self.stack, 'timeout_secs')
        self.stack.timeout_secs().AndReturn(None)

        self.m.StubOutWithMock(scheduler, 'wallclock')

        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.001)
        scheduler.wallclock().AndReturn(st + 0.1)
        wc.WaitConditionHandle.get_status().AndReturn([])
        scheduler.wallclock().AndReturn(st + 4.1)
        wc.WaitConditionHandle.get_status().AndReturn([])
        scheduler.wallclock().AndReturn(st + 5.1)

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack.resources['WaitForTheHandle']

        self.assertEqual(rsrc.state, (rsrc.CREATE, rsrc.FAILED))
        reason = rsrc.status_reason
        self.assertTrue(reason.startswith('WaitConditionTimeout:'))

        self.assertRaises(resource.UpdateReplace,
                          rsrc.handle_update, {}, {}, {})
        self.m.VerifyAll()
Exemplo n.º 5
0
    def test_timeout(self):
        st = time.time()

        self.stack = self.create_stack()

        self.m.StubOutWithMock(scheduler, 'wallclock')

        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.001)
        scheduler.wallclock().AndReturn(st + 0.1)
        wc.WaitConditionHandle.get_status().AndReturn([])
        scheduler.TaskRunner._sleep(mox.IsA(int)).AndReturn(None)
        scheduler.wallclock().AndReturn(st + 4.1)
        wc.WaitConditionHandle.get_status().AndReturn([])
        scheduler.TaskRunner._sleep(mox.IsA(int)).AndReturn(None)
        scheduler.wallclock().AndReturn(st + 5.1)

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack.resources['WaitForTheHandle']

        self.assertEqual(rsrc.state, rsrc.CREATE_FAILED)
        reason = rsrc.state_description
        self.assertTrue(reason.startswith('WaitConditionTimeout:'))

        self.assertRaises(resource.UpdateReplace, rsrc.handle_update, {}, {},
                          {})
        self.m.VerifyAll()
Exemplo n.º 6
0
    def test_timeout(self):
        st = time.time()

        self.stack = self.create_stack()

        self.m.StubOutWithMock(scheduler, 'wallclock')

        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.001)
        scheduler.wallclock().AndReturn(st + 0.1)
        wc.WaitConditionHandle.get_status().AndReturn([])
        eventlet.sleep(mox.IsA(int)).AndReturn(None)
        scheduler.wallclock().AndReturn(st + 4.1)
        wc.WaitConditionHandle.get_status().AndReturn([])
        eventlet.sleep(mox.IsA(int)).AndReturn(None)
        scheduler.wallclock().AndReturn(st + 5.1)

        self.m.ReplayAll()

        self.stack.create()

        resource = self.stack.resources['WaitForTheHandle']

        self.assertEqual(resource.state, resource.CREATE_FAILED)
        reason = resource.state_description
        self.assertTrue(reason.startswith('WaitConditionTimeout:'))

        self.assertEqual(wc.WaitCondition.UPDATE_REPLACE,
                         resource.handle_update({}))
        self.m.VerifyAll()
Exemplo n.º 7
0
    def test_timeout(self):
        st = time.time()

        self.stack = self.create_stack()

        self.m.StubOutWithMock(scheduler, 'wallclock')

        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.001)
        scheduler.wallclock().AndReturn(st + 0.1)
        wc.WaitConditionHandle.get_status().AndReturn([])
        eventlet.sleep(mox.IsA(int)).AndReturn(None)
        scheduler.wallclock().AndReturn(st + 4.1)
        wc.WaitConditionHandle.get_status().AndReturn([])
        eventlet.sleep(mox.IsA(int)).AndReturn(None)
        scheduler.wallclock().AndReturn(st + 5.1)

        self.m.ReplayAll()

        self.stack.create()

        resource = self.stack.resources['WaitForTheHandle']

        self.assertEqual(resource.state, resource.CREATE_FAILED)
        reason = resource.state_description
        self.assertTrue(reason.startswith('WaitConditionTimeout:'))

        self.assertEqual(wc.WaitCondition.UPDATE_REPLACE,
                         resource.handle_update({}))
        self.m.VerifyAll()
Exemplo n.º 8
0
    def test_cancel_grace_period(self):
        st = scheduler.wallclock()
        task = DummyTask(5)

        self.m.StubOutWithMock(task, 'do_step')
        self.m.StubOutWithMock(scheduler.TaskRunner, '_sleep')
        self.m.StubOutWithMock(scheduler, 'wallclock')

        task.do_step(1).AndReturn(None)
        task.do_step(2).AndReturn(None)
        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.5)
        task.do_step(3).AndReturn(None)
        scheduler.wallclock().AndReturn(st + 1.0)
        task.do_step(4).AndReturn(None)
        scheduler.wallclock().AndReturn(st + 1.5)

        self.m.ReplayAll()

        runner = scheduler.TaskRunner(task)

        self.assertFalse(runner.started())
        runner.start()
        self.assertTrue(runner.started())

        self.assertFalse(runner.step())
        runner.cancel(grace_period=1.0)
        self.assertFalse(runner.step())
        self.assertFalse(runner.step())
        self.assertTrue(runner.step())
Exemplo n.º 9
0
    def test_cancel_grace_period(self):
        st = scheduler.wallclock()
        task = DummyTask(5)

        self.m.StubOutWithMock(task, 'do_step')
        self.m.StubOutWithMock(scheduler.TaskRunner, '_sleep')
        self.m.StubOutWithMock(scheduler, 'wallclock')

        task.do_step(1).AndReturn(None)
        task.do_step(2).AndReturn(None)
        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.5)
        task.do_step(3).AndReturn(None)
        scheduler.wallclock().AndReturn(st + 1.0)
        task.do_step(4).AndReturn(None)
        scheduler.wallclock().AndReturn(st + 1.5)

        self.m.ReplayAll()

        runner = scheduler.TaskRunner(task)

        self.assertFalse(runner.started())
        runner.start()
        self.assertTrue(runner.started())

        self.assertFalse(runner.step())
        runner.cancel(grace_period=1.0)
        self.assertFalse(runner.step())
        self.assertFalse(runner.step())
        self.assertTrue(runner.step())
Exemplo n.º 10
0
    def test_handle_update_timeout(self):
        self.stack = self.create_stack()
        self.m.ReplayAll()
        self.stack.create()

        rsrc = self.stack['WaitForTheHandle']
        self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state)

        self.m.VerifyAll()
        self.m.UnsetStubs()

        st = time.time()

        self.m.StubOutWithMock(scheduler.TaskRunner, '_sleep')
        scheduler.TaskRunner._sleep(
            mox.IgnoreArg()).MultipleTimes().AndReturn(None)

        self.m.StubOutWithMock(scheduler, 'wallclock')

        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.001)
        scheduler.wallclock().AndReturn(st + 0.1)
        scheduler.wallclock().AndReturn(st + 4.1)
        scheduler.wallclock().AndReturn(st + 5.1)

        self.m.ReplayAll()

        update_snippet = {
            "Type": "AWS::CloudFormation::WaitCondition",
            "Properties": {
                "Handle": {
                    "Ref": "WaitHandle"
                },
                "Timeout": "5",
                "Count": "5"
            }
        }
        prop_diff = {"Count": 5}
        parsed_snippet = self.stack.resolve_static_data(update_snippet)
        updater = rsrc.handle_update(parsed_snippet, {}, prop_diff)
        self.assertEqual(5, rsrc.properties['Count'])
        ex = self.assertRaises(wc.WaitConditionTimeout,
                               updater.run_to_completion)
        self.assertEqual("0 of 5 received", str(ex))
        self.m.VerifyAll()
        self.m.UnsetStubs()
Exemplo n.º 11
0
    def test_timeout_swallowed(self):
        st = scheduler.wallclock()

        def task():
            while True:
                try:
                    yield
                except scheduler.Timeout:
                    yield
                    self.fail('Task still running')

        self.m.StubOutWithMock(scheduler, 'wallclock')
        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.5)
        scheduler.wallclock().AndReturn(st + 1.5)

        self.m.ReplayAll()

        runner = scheduler.TaskRunner(task)

        runner.start(timeout=1)
        self.assertTrue(runner)
        self.assertTrue(runner.step())
        self.assertFalse(runner)
        self.assertTrue(runner.step())
Exemplo n.º 12
0
    def test_timeout_swallowed(self):
        st = scheduler.wallclock()

        def task():
            while True:
                try:
                    yield
                except scheduler.Timeout:
                    yield
                    self.fail('Task still running')

        self.m.StubOutWithMock(scheduler, 'wallclock')
        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.5)
        scheduler.wallclock().AndReturn(st + 1.5)

        self.m.ReplayAll()

        runner = scheduler.TaskRunner(task)

        runner.start(timeout=1)
        self.assertTrue(runner)
        self.assertTrue(runner.step())
        self.assertFalse(runner)
        self.assertTrue(runner.step())
Exemplo n.º 13
0
    def test_timeout_return(self):
        st = scheduler.wallclock()

        def task():
            while True:
                try:
                    yield
                except scheduler.Timeout:
                    return

        self.mox.StubOutWithMock(scheduler, 'wallclock')
        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.5)
        scheduler.wallclock().AndReturn(st + 1.5)

        self.mox.ReplayAll()

        runner = scheduler.TaskRunner(task)

        runner.start(timeout=1)
        self.assertTrue(runner)
        self.assertTrue(runner.step())
        self.assertFalse(runner)

        self.mox.VerifyAll()
Exemplo n.º 14
0
    def test_handle_update_timeout(self):
        self.stack = self.create_stack()
        self.m.ReplayAll()
        self.stack.create()

        rsrc = self.stack['WaitForTheHandle']
        self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state)

        self.m.VerifyAll()
        self.m.UnsetStubs()

        st = time.time()

        self.m.StubOutWithMock(scheduler.TaskRunner, '_sleep')
        scheduler.TaskRunner._sleep(mox.IgnoreArg()).MultipleTimes().AndReturn(
            None)

        self.m.StubOutWithMock(scheduler, 'wallclock')

        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.001)
        scheduler.wallclock().AndReturn(st + 0.1)
        scheduler.wallclock().AndReturn(st + 4.1)
        scheduler.wallclock().AndReturn(st + 5.1)

        self.m.ReplayAll()

        update_snippet = {"Type": "AWS::CloudFormation::WaitCondition",
                          "Properties": {
                              "Handle": {"Ref": "WaitHandle"},
                              "Timeout": "5",
                              "Count": "5"}}
        prop_diff = {"Count": 5}
        parsed_snippet = self.stack.resolve_static_data(update_snippet)
        updater = rsrc.handle_update(parsed_snippet, {}, prop_diff)
        self.assertEqual(5, rsrc.properties['Count'])
        ex = self.assertRaises(wc.WaitConditionTimeout,
                               updater.run_to_completion)
        self.assertEqual("0 of 5 received", str(ex))
        self.m.VerifyAll()
        self.m.UnsetStubs()
Exemplo n.º 15
0
    def test_handle_update_timeout(self):
        self.stack = self.create_stack()
        self.m.ReplayAll()
        self.stack.create()

        rsrc = self.stack['WaitForTheHandle']
        self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state)

        self.m.VerifyAll()
        self.m.UnsetStubs()

        st = time.time()

        self.m.StubOutWithMock(scheduler.TaskRunner, '_sleep')
        scheduler.TaskRunner._sleep(mox.IgnoreArg()).MultipleTimes().AndReturn(
            None)

        self.m.StubOutWithMock(scheduler, 'wallclock')

        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.001)
        scheduler.wallclock().AndReturn(st + 0.1)
        scheduler.wallclock().AndReturn(st + 4.1)
        scheduler.wallclock().AndReturn(st + 5.1)

        self.m.ReplayAll()

        prop_diff = {"Count": 5}
        props = copy.copy(rsrc.properties.data)
        props.update(prop_diff)
        update_defn = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(),
                                                   props)
        updater = rsrc.handle_update(update_defn, {}, prop_diff)
        self.assertEqual(5, rsrc.properties['Count'])
        ex = self.assertRaises(wc.WaitConditionTimeout,
                               updater.run_to_completion)
        self.assertEqual("0 of 5 received", six.text_type(ex))
        self.m.VerifyAll()
        self.m.UnsetStubs()
Exemplo n.º 16
0
    def test_handle_update_timeout(self):
        self.stack = self.create_stack()
        self.m.ReplayAll()
        self.stack.create()

        rsrc = self.stack['WaitForTheHandle']
        self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state)

        self.m.VerifyAll()
        self.m.UnsetStubs()

        st = time.time()

        self.m.StubOutWithMock(scheduler.TaskRunner, '_sleep')
        scheduler.TaskRunner._sleep(
            mox.IgnoreArg()).MultipleTimes().AndReturn(None)

        self.m.StubOutWithMock(scheduler, 'wallclock')

        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.001)
        scheduler.wallclock().AndReturn(st + 0.1)
        scheduler.wallclock().AndReturn(st + 4.1)
        scheduler.wallclock().AndReturn(st + 5.1)

        self.m.ReplayAll()

        prop_diff = {"Count": 5}
        props = copy.copy(rsrc.properties.data)
        props.update(prop_diff)
        update_defn = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(),
                                                   props)
        updater = rsrc.handle_update(update_defn, {}, prop_diff)
        self.assertEqual(5, rsrc.properties['Count'])
        ex = self.assertRaises(wc.WaitConditionTimeout,
                               updater.run_to_completion)
        self.assertEqual("0 of 5 received", six.text_type(ex))
        self.m.VerifyAll()
        self.m.UnsetStubs()
Exemplo n.º 17
0
    def test_timeout(self):
        st = scheduler.wallclock()

        def task():
            while True:
                yield

        self.m.StubOutWithMock(scheduler, 'wallclock')
        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.5)
        scheduler.wallclock().AndReturn(st + 1.5)

        self.m.ReplayAll()

        runner = scheduler.TaskRunner(task)

        runner.start(timeout=1)
        self.assertTrue(runner)
        self.assertRaises(scheduler.Timeout, runner.step)
Exemplo n.º 18
0
    def test_timeout(self):
        st = scheduler.wallclock()

        def task():
            while True:
                yield

        self.m.StubOutWithMock(scheduler, 'wallclock')
        scheduler.wallclock().AndReturn(st)
        scheduler.wallclock().AndReturn(st + 0.5)
        scheduler.wallclock().AndReturn(st + 1.5)

        self.m.ReplayAll()

        runner = scheduler.TaskRunner(task)

        runner.start(timeout=1)
        self.assertTrue(runner)
        self.assertRaises(scheduler.Timeout, runner.step)