def test_with_wrong_vcpu_size_in_content(self):
        instance_event = utils.get_instance_event()
        instance_event['content']['vcpu'] = 'size'
        self.post_json('/events', instance_event, expect_errors=True)

        instance_event['content']['vcpu'] = -10
        self.post_json('/events', instance_event, expect_errors=True)
    def test_power_off_resize_disk_exists_event_success(self):
        instance_event = utils.get_instance_event()
        instance_event['event_time'] = '2015-10-01T01:00:00.000000'
        instance_event['event_type'] = 'power_off'
        self.post_json('/events', instance_event)

        instance_event['event_time'] = '2015-10-11T01:00:00.000000'
        instance_event['content']['disk'] = 1000
        instance_event['event_type'] = 'resize'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 240)
        self.assertEqual(res['status'], 'shutoff')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 1)

        instance_event['event_time'] = '2015-10-21T01:00:00.000000'
        instance_event['event_type'] = 'exists'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 240240)
        self.assertEqual(res['status'], 'shutoff')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 2)
        self.assertEqual(int(records[0]['consumption']), 240)
        self.assertEqual(int(records[1]['consumption']), 240000)
    def test_exists_resize_delete_event_success(self):
        instance_event = utils.get_instance_event()
        instance_event['event_time'] = '2015-10-01T01:00:00.000000'
        instance_event['event_type'] = 'exists'
        self.post_json('/events', instance_event)

        instance_event['event_time'] = '2015-10-11T01:00:00.000000'
        instance_event['content']['vcpu'] = 1000
        instance_event['event_type'] = 'resize'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 720)
        self.assertEqual(res['status'], 'active')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 1)

        instance_event['event_time'] = '2015-10-21T01:00:00.000000'
        instance_event['event_type'] = 'delete'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 241200)
        self.assertEqual(res['status'], 'delete')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 2)
        self.assertEqual(int(records[0]['consumption']), 720)
        self.assertEqual(int(records[1]['consumption']), 240480)
    def test_create_power_off_delete_event_success(self):
        instance_event = utils.get_instance_event()
        instance_event['event_time'] = '2015-10-01T01:00:00.000000'
        self.post_json('/events', instance_event)

        instance_event['event_time'] = '2015-10-11T01:00:00.000000'
        instance_event['event_type'] = 'power_off'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 720)
        self.assertEqual(res['status'], 'shutoff')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 1)

        instance_event['event_time'] = '2015-10-21T01:00:00.000000'
        instance_event['event_type'] = 'delete'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 960)
        self.assertEqual(res['status'], 'delete')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 2)
        self.assertEqual(int(records[0]['consumption']), 720)
        self.assertEqual(int(records[1]['consumption']), 240)
    def test_exists_resize_delete_event_success(self):
        instance_event = utils.get_instance_event()
        instance_event['event_time'] = '2015-10-01T01:00:00.000000'
        instance_event['event_type'] = 'exists'
        self.post_json('/events', instance_event)

        instance_event['event_time'] = '2015-10-11T01:00:00.000000'
        instance_event['content']['vcpu'] = 1000
        instance_event['event_type'] = 'resize'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 720)
        self.assertEqual(res['status'], 'active')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 1)

        instance_event['event_time'] = '2015-10-21T01:00:00.000000'
        instance_event['event_type'] = 'delete'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 241200)
        self.assertEqual(res['status'], 'delete')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 2)
        self.assertEqual(int(records[0]['consumption']), 720)
        self.assertEqual(int(records[1]['consumption']), 240480)
    def test_create_power_off_delete_event_success(self):
        instance_event = utils.get_instance_event()
        instance_event['event_time'] = '2015-10-01T01:00:00.000000'
        self.post_json('/events', instance_event)

        instance_event['event_time'] = '2015-10-11T01:00:00.000000'
        instance_event['event_type'] = 'power_off'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 720)
        self.assertEqual(res['status'], 'shutoff')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 1)

        instance_event['event_time'] = '2015-10-21T01:00:00.000000'
        instance_event['event_type'] = 'delete'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 960)
        self.assertEqual(res['status'], 'delete')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 2)
        self.assertEqual(int(records[0]['consumption']), 720)
        self.assertEqual(int(records[1]['consumption']), 240)
    def test_with_wrong_vcpu_size_in_content(self):
        instance_event = utils.get_instance_event()
        instance_event['content']['vcpu'] = 'size'
        self.post_json('/events', instance_event, expect_errors=True)

        instance_event['content']['vcpu'] = -10
        self.post_json('/events', instance_event, expect_errors=True)
    def test_create_delete_create_event_success(self):
        instance_event = utils.get_instance_event()
        instance_event['event_time'] = '2015-10-01T01:00:00.000000'
        instance_event['event_type'] = 'create'
        self.post_json('/events', instance_event)

        instance_event['event_time'] = '2015-10-11T01:00:00.000000'
        instance_event['event_type'] = 'delete'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 720)
        self.assertEqual(res['status'], 'delete')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 1)

        instance_event['event_time'] = '2015-10-21T01:00:00.000000'
        instance_event['event_type'] = 'exists'
        self.post_json('/events', instance_event, expect_errors=True)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 720)
        self.assertEqual(res['status'], 'delete')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 1)
        self.assertEqual(int(records[0]['consumption']), 720)
    def test_create_exists_delete_with_missing_resize(self):
        instance_event = utils.get_instance_event()
        instance_event['event_time'] = '2015-10-01T01:00:00.000000'
        instance_event['event_type'] = 'create'
        self.post_json('/events', instance_event)

        instance_event['event_time'] = '2015-10-11T01:00:00.000000'
        # Missing resize event
        instance_event['content']['vcpu'] = 1000
        instance_event['event_type'] = 'exists'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 720)

        instance_event['event_time'] = '2015-10-21T01:00:00.000000'
        instance_event['event_type'] = 'delete'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 241200)

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 2)
        self.assertEqual(int(records[0]['consumption']), 720)
        self.assertEqual(int(records[1]['consumption']), 240480)
    def test_create_delete_create_event_success(self):
        instance_event = utils.get_instance_event()
        instance_event['event_time'] = '2015-10-01T01:00:00.000000'
        instance_event['event_type'] = 'create'
        self.post_json('/events', instance_event)

        instance_event['event_time'] = '2015-10-11T01:00:00.000000'
        instance_event['event_type'] = 'delete'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 720)
        self.assertEqual(res['status'], 'delete')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 1)

        instance_event['event_time'] = '2015-10-21T01:00:00.000000'
        instance_event['event_type'] = 'exists'
        self.post_json('/events', instance_event, expect_errors=True)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 720)
        self.assertEqual(res['status'], 'delete')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 1)
        self.assertEqual(int(records[0]['consumption']), 720)
    def test_power_off_resize_disk_exists_event_success(self):
        instance_event = utils.get_instance_event()
        instance_event['event_time'] = '2015-10-01T01:00:00.000000'
        instance_event['event_type'] = 'power_off'
        self.post_json('/events', instance_event)

        instance_event['event_time'] = '2015-10-11T01:00:00.000000'
        instance_event['content']['disk'] = 1000
        instance_event['event_type'] = 'resize'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 240)
        self.assertEqual(res['status'], 'shutoff')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 1)

        instance_event['event_time'] = '2015-10-21T01:00:00.000000'
        instance_event['event_type'] = 'exists'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 240240)
        self.assertEqual(res['status'], 'shutoff')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 2)
        self.assertEqual(int(records[0]['consumption']), 240)
        self.assertEqual(int(records[1]['consumption']), 240000)
    def test_create_exists_delete_with_missing_resize(self):
        instance_event = utils.get_instance_event()
        instance_event['event_time'] = '2015-10-01T01:00:00.000000'
        instance_event['event_type'] = 'create'
        self.post_json('/events', instance_event)

        instance_event['event_time'] = '2015-10-11T01:00:00.000000'
        # Missing resize event
        instance_event['content']['vcpu'] = 1000
        instance_event['event_type'] = 'exists'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 720)

        instance_event['event_time'] = '2015-10-21T01:00:00.000000'
        instance_event['event_type'] = 'delete'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 241200)

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 2)
        self.assertEqual(int(records[0]['consumption']), 720)
        self.assertEqual(int(records[1]['consumption']), 240480)
    def test_with_wrong_event_time(self):
        instance_event = utils.get_instance_event()
        instance_event['event_time'] = '2015-10-01T01:00:00.000000'
        self.post_json('/events', instance_event)

        instance_event['event_time'] = '2015-09-11T01:00:00.000000'
        instance_event['event_type'] = 'exists'
        self.post_json('/events', instance_event, expect_errors=True)
    def test_with_wrong_event_time(self):
        instance_event = utils.get_instance_event()
        instance_event['event_time'] = '2015-10-01T01:00:00.000000'
        self.post_json('/events', instance_event)

        instance_event['event_time'] = '2015-09-11T01:00:00.000000'
        instance_event['event_type'] = 'exists'
        self.post_json('/events', instance_event, expect_errors=True)
    def test_post_delete_event_success(self):
        instance_event = utils.get_instance_event()
        instance_event['event_type'] = 'delete'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        self.get_json(url, expect_errors=True)

        url = '/records/' + instance_event['resource_id']
        self.get_json(url, expect_errors=True)
    def test_post_create_event_success(self):
        instance_event = utils.get_instance_event()
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(res['status'], 'active')

        url = '/records/' + instance_event['resource_id']
        self.get_json(url, expect_errors=True)
    def test_post_create_event_success(self):
        instance_event = utils.get_instance_event()
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(res['status'], 'active')

        url = '/records/' + instance_event['resource_id']
        self.get_json(url, expect_errors=True)
    def test_post_delete_event_success(self):
        instance_event = utils.get_instance_event()
        instance_event['event_type'] = 'delete'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        self.get_json(url, expect_errors=True)

        url = '/records/' + instance_event['resource_id']
        self.get_json(url, expect_errors=True)
    def test_post_shut_off_event_success(self):
        instance_event = utils.get_instance_event()
        instance_event['event_type'] = 'power_off'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(res['status'], 'shutoff')

        url = '/records/' + instance_event['resource_id']
        self.get_json(url, expect_errors=True)
    def test_post_shut_off_event_success(self):
        instance_event = utils.get_instance_event()
        instance_event['event_type'] = 'power_off'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(res['status'], 'shutoff')

        url = '/records/' + instance_event['resource_id']
        self.get_json(url, expect_errors=True)
    def test_power_off_and_power_on_event_success(self):
        instance_event = utils.get_instance_event()
        instance_event['event_time'] = '2015-10-01T01:00:00.000000'
        instance_event['event_type'] = 'power_off'
        self.post_json('/events', instance_event)

        instance_event['event_time'] = '2015-10-11T01:00:00.000000'
        instance_event['event_type'] = 'power_on'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 240)
        self.assertEqual(res['status'], 'active')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 1)
        self.assertEqual(int(records[0]['consumption']), 240)
    def test_power_off_and_power_on_event_success(self):
        instance_event = utils.get_instance_event()
        instance_event['event_time'] = '2015-10-01T01:00:00.000000'
        instance_event['event_type'] = 'power_off'
        self.post_json('/events', instance_event)

        instance_event['event_time'] = '2015-10-11T01:00:00.000000'
        instance_event['event_type'] = 'power_on'
        self.post_json('/events', instance_event)

        url = '/resources/' + instance_event['resource_id']
        res = self.get_json(url)
        self.assertEqual(int(res['consumption']), 240)
        self.assertEqual(res['status'], 'active')

        url = '/records/' + instance_event['resource_id']
        records = self.get_json(url)
        self.assertEqual(len(records), 1)
        self.assertEqual(int(records[0]['consumption']), 240)
 def test_without_resource_id(self):
     instance_event = utils.get_instance_event()
     instance_event.pop('resource_id')
     self.post_json('/events', instance_event, expect_errors=True)
 def test_wrong_event_type(self):
     instance_event = utils.get_instance_event()
     instance_event['event_type'] = 'wrong_event_type'
     self.post_json('/events', instance_event, expect_errors=True)
 def test_without_vcpu_in_content(self):
     instance_event = utils.get_instance_event()
     instance_event['content'].pop('vcpu')
     self.post_json('/events', instance_event, expect_errors=True)
 def test_without_vcpu_in_content(self):
     instance_event = utils.get_instance_event()
     instance_event['content'].pop('vcpu')
     self.post_json('/events', instance_event, expect_errors=True)
 def test_without_resource_id(self):
     instance_event = utils.get_instance_event()
     instance_event.pop('resource_id')
     self.post_json('/events', instance_event, expect_errors=True)
 def test_wrong_event_type(self):
     instance_event = utils.get_instance_event()
     instance_event['event_type'] = 'wrong_event_type'
     self.post_json('/events', instance_event, expect_errors=True)