def test_processess_cron_with_available_image_with_deletion( self, slack, boto3, constants, aws): client = MagicMock() boto3.client.return_value = client server = helper.get_mock_server(state="stopped") aws.find_devserver.return_value = server aws.get_images.return_value = {"Images": [{"State": "available"}]} client.describe_images.return_value = { "Images": [{ "ImageId": "foo", "BlockDeviceMappings": [{ "Ebs": { "SnapshotId": "bar" } }], }] } resp = albatross_internal.handle(get_test_cron(), None) self.assertEqual(200, resp["statusCode"]) client.terminate_instances.assert_called_with( InstanceIds=[server["InstanceId"]]) slack.post.assert_called_with("Image created and instance terminated") client.deregister_image.assert_called_with(ImageId="foo") client.delete_snapshot.assert_called_with(SnapshotId="bar")
def test_processess_cron_with_running_server(self, slack, boto3, constants, aws): client = MagicMock() boto3.client.return_value = client server = helper.get_mock_server(state="running") aws.find_devserver.return_value = server resp = albatross_internal.handle(get_test_cron(), None) self.assertEqual(200, resp["statusCode"]) client.terminate_instances.assert_not_called() slack.post.assert_not_called()
def test_processess_state_change_for_irrelevant_server( self, slack, boto3, constants, aws): client = MagicMock() boto3.client.return_value = client server = helper.get_mock_server(state="stopped") aws.find_devserver.return_value = server resp = albatross_internal.handle(get_state_change("foo", "bar"), None) self.assertEqual(200, resp["statusCode"]) slack.post.assert_not_called() aws.create_image.assert_not_called() client.create_tags.assert_not_called()
def test_processess_cron_with_unavailable_image(self, slack, boto3, constants, aws): client = MagicMock() boto3.client.return_value = client server = helper.get_mock_server(state="stopped") aws.find_devserver.return_value = server aws.get_images.return_value = {"Images": [{"State": "pending"}]} resp = albatross_internal.handle(get_test_cron(), None) self.assertEqual(200, resp["statusCode"]) client.terminate_instances.assert_not_called() slack.post.assert_not_called()
def test_processess_sns_for_up_with_stopped_server(self, slack, boto3, constants, aws): constants.UP = "up" resource = MagicMock() boto3.resource.return_value = resource client = MagicMock() boto3.client.return_value = client aws.find_devserver.return_value = helper.get_mock_server( state="stopped") resp = albatross_internal.handle(get_test_sns(constants.UP), None) self.assertEqual(200, resp["statusCode"]) slack.post.assert_called_with( "Server is in the shutdown process, please wait") aws.spawn_devserver.assert_not_called()
def test_processess_sns_for_up_with_running_server(self, slack, boto3, constants, aws): constants.UP = "up" resource = MagicMock() boto3.resource.return_value = resource client = MagicMock() boto3.client.return_value = client aws.find_devserver.return_value = helper.get_mock_server( state="running") resp = albatross_internal.handle(get_test_sns(constants.UP), None) self.assertEqual(200, resp["statusCode"]) slack.post.assert_called_with( "Server already running, can't start another one") aws.spawn_devserver.assert_not_called()
def test_status(self, slack, boto3, constants, aws): constants.COMMANDS = set(["up", "down", "status"]) constants.STATUS = "status" event = get_test_event("status") slack.verify.return_value = True aws.find_devserver.return_value = helper.get_mock_server() resp = albatross.handle(event, None) expected = json.dumps({ "text": "running", "response_type": "in_channel" }) self.assertEqual(200, resp["statusCode"]) self.assertEqual(expected, resp["body"]) boto3.client.assert_any_call("ec2") boto3.client.assert_any_call("sns")
def test_down_with_stopped_instance(self, slack, boto3, constants, aws): constants.COMMANDS = set(["up", "down", "status"]) constants.DOWN = "down" event = get_test_event("down") slack.verify.return_value = True ec2 = MagicMock() boto3.client.side_effect = [ec2, None] server = helper.get_mock_server(state="stoped") aws.find_devserver.return_value = server resp = albatross.handle(event, None) expected = json.dumps({ "text": "Server not running", "response_type": "in_channel" }) self.assertEqual(200, resp["statusCode"]) self.assertEqual(expected, resp["body"]) ec2.stop_instances.assert_not_called() boto3.client.assert_any_call("ec2") boto3.client.assert_any_call("sns")
def test_processess_state_change_for_running_state_and_server( self, slack, boto3, constants, aws): client = MagicMock() boto3.client.return_value = client resource = MagicMock() boto3.resource.return_value = resource server = helper.get_mock_server(state="running") aws.find_devserver.return_value = server refreshed_server = MagicMock() refreshed_server.public_ip_address = "foobar.com" resource.Instance.return_value = refreshed_server resp = albatross_internal.handle( get_state_change(server["InstanceId"], "running"), None) self.assertEqual(200, resp["statusCode"]) slack.post.assert_called_with("""devserver successfully started: ``` mosh -I albatross [email protected] ```""") aws.create_image.assert_not_called() client.create_tags.assert_not_called()
def test_processess_state_change_for_stopping_state_and_server( self, slack, boto3, constants, aws): client = MagicMock() boto3.client.return_value = client server = helper.get_mock_server(state="stopped") aws.find_devserver.return_value = server aws.get_images.return_value = {"Images": [{"ImageId": "foo"}]} aws.create_image.return_value = {"ImageId": "id2"} resp = albatross_internal.handle( get_state_change(server["InstanceId"], "stopped"), None) self.assertEqual(200, resp["statusCode"]) slack.post.assert_called_with("Instance has stopped, image created") aws.create_image.assert_called_with(client, server["InstanceId"]) client.create_tags.assert_called_with( Resources=["id2"], Tags=[{ "Key": "application", "Value": constants.DEVSERVER }], )