def setUp(self):
     # set dummy credentials
     os.environ['AWS_ACCESS_KEY_ID'] = "THISISTESTKEY"
     os.environ['AWS_SECRET_ACCESS_KEY'] = "THISISTESTSECRET"
     self.aws_key = Credential()
     # set for resource
     self.vpc_resource = VPCResource()
     self.maxDiff = None
class CloudFormationTest(unittest.TestCase):

    def setUp(self):
        # set dummy credentials
        os.environ['AWS_ACCESS_KEY_ID'] = "THISISTESTKEY"
        os.environ['AWS_SECRET_ACCESS_KEY'] = "THISISTESTSECRET"
        self.aws_key = Credential()
        # set for resource
        self.vpc_resource = VPCResource()
        self.maxDiff = None

    def _get_template_body(self):
        template = {"Resources": {"VPC": {"Type": "AWS::EC2::VPC",
                                          "Properties": {
                                          "CidrBlock": "10.0.0.0/16",
                                          "Tags": [{"Key": "Application", "Value": {"Ref": "AWS::StackId"}}]
                                          }}}}
        return json.dumps(template)

    @mock_cloudformation
    def test_create_stack(self):
        # init cloudformation
        cloudformation = CloudFormation('us-east-1', self.aws_key.aws_access_key_id, self.aws_key.aws_secret_access_key)
        cloudformation.create_stack("test", self._get_template_body(), "")
        self.assertEqual(1, len(cloudformation.describe_stacks()))

    def test_update_stack(self):
        pass

    @mock_cloudformation
    def test_delete_stack(self):
        # init cloudformation
        cloudformation = CloudFormation('us-east-1', self.aws_key.aws_access_key_id, self.aws_key.aws_secret_access_key)
        cloudformation.create_stack("test", self._get_template_body(), "")
        self.assertEqual(1, len(cloudformation.describe_stacks()))
        cloudformation.delete_stack("test")
        self.assertEqual(0, len(cloudformation.describe_stacks()))

    #
    # cloudformation resource
    #

    def _template_to_dict(self, template):
        return yaml.load(template.to_json())

    def _is_equal(self, dict1, dict2):
        print dict1
        print dict2
        return 0 == cmp(dict1, dict2)

    """
    ## The describe_stack_resource action has not been implemented
    @mock_cloudformation
    def test_describe_stack_resource(self):
        cloudformation = CloudFormation('us-east-1', self.aws_key.aws_access_key_id, self.aws_key.aws_secret_access_key)
        cloudformation.create_stack("test", self._get_template_body(), "")
        cloudformation.describe_stack_resource("test", "VPC1")
        self.assertEqual(1, len(cloudformation.describe_stacks()))
    """

    def test_add_vpc_resource(self):
        self.vpc_resource.add_vpc("10.2.0.0/16")
        self.assertSetEqual(set(self._template_to_dict(self.vpc_resource.get_template())), set(expected_vpc))
        self.assertDictEqual(expected_vpc, yaml.load(self.vpc_resource.get_template().to_json()))

    def test_add_subnet(self):
        pass

    def test_add_internet_gateway(self):
        pass

    def test_add_route_table(self):
        pass

    def test_route_to_gateway(self):
        pass