From f6aad954e2d208f9fcdbc0c45c0b3578dca01f28 Mon Sep 17 00:00:00 2001 From: Anton Chuchkalov Date: Fri, 28 Nov 2014 16:12:07 +0400 Subject: [PATCH] complete tests for openstack deploy_envs validation --- .../db/mongo/models/deploy_env_base.rb | 9 +- .../db/mongo/models/deploy_env_openstack.rb | 18 +-- .../db/validators/deploy_env/groups.rb | 2 +- .../10_create/40_deploy_env.feature.erb | 144 ++++-------------- .../tests/templates/fixtures/deploy_env.yml | 72 +++++++-- 5 files changed, 104 insertions(+), 141 deletions(-) diff --git a/devops-service/db/mongo/models/deploy_env_base.rb b/devops-service/db/mongo/models/deploy_env_base.rb index fa65a67..9f68c8c 100644 --- a/devops-service/db/mongo/models/deploy_env_base.rb +++ b/devops-service/db/mongo/models/deploy_env_base.rb @@ -20,8 +20,13 @@ class DeployEnvBase < MongoModel def validate! super - self.class.validators.each do |validator| - validator.new(self).validate! + begin + self.class.validators.each do |validator| + validator.new(self).validate! + end + true + rescue InvalidRecord => e + raise InvalidRecord.new "Deploy environment '#{self.identifier}'. " + e.message end end diff --git a/devops-service/db/mongo/models/deploy_env_openstack.rb b/devops-service/db/mongo/models/deploy_env_openstack.rb index 6293c96..0fc4f51 100644 --- a/devops-service/db/mongo/models/deploy_env_openstack.rb +++ b/devops-service/db/mongo/models/deploy_env_openstack.rb @@ -21,7 +21,8 @@ class DeployEnvOpenstack < DeployEnvBase ::Validators::DeployEnv::Flavor, ::Validators::DeployEnv::Image, ::Validators::DeployEnv::SubnetNotEmpty, - ::Validators::DeployEnv::SubnetBelongsToProvider + ::Validators::DeployEnv::SubnetBelongsToProvider, + ::Validators::DeployEnv::Groups def initialize d={} super(d) @@ -33,21 +34,6 @@ class DeployEnvOpenstack < DeployEnvBase self.groups = (b.is_a?(Array) ? b.uniq : b) end - def validate! - super - - p = provider_instance - check_subnets_and_groups!(p, self.subnets, self.groups) do |networks| - if self.subnets.empty? - raise InvalidRecord.new "Subnets array can not be empty" - end - end - - true - rescue InvalidRecord => e - raise InvalidRecord.new "Deploy environment '#{self.identifier}'. " + e.message - end - def to_hash h = super h.merge!({ diff --git a/devops-service/db/validators/deploy_env/groups.rb b/devops-service/db/validators/deploy_env/groups.rb index 4f64c6e..be4a3f7 100644 --- a/devops-service/db/validators/deploy_env/groups.rb +++ b/devops-service/db/validators/deploy_env/groups.rb @@ -8,7 +8,7 @@ module Validators end def message - "Invalid groups '#{@invalid_groups.join("', '")}'" + "Invalid groups '#{@invalid_groups.join("', '")}'." end end end \ No newline at end of file diff --git a/devops-service/tests/templates/api_v2/10_create/40_deploy_env.feature.erb b/devops-service/tests/templates/api_v2/10_create/40_deploy_env.feature.erb index 646e9ad..1c18bda 100644 --- a/devops-service/tests/templates/api_v2/10_create/40_deploy_env.feature.erb +++ b/devops-service/tests/templates/api_v2/10_create/40_deploy_env.feature.erb @@ -6,7 +6,7 @@ Feature: Create deploy env #--------------------- <% openstack_project_name = @config["openstack"]["project"]["name"] %> - <% precreated_openstack_deploy_env = '{ "identifier": "test", "run_list": [], "expires": null, "provider": "openstack", "users": [ "test" ], "flavor": "test_flavor", "image": "test_image", "subnets": ["test_network"] }' %> + <% precreated_openstack_deploy_env = @formatter.json('deploy_env/openstack/valid', spaces: 8) %> @openstack Scenario: Send deploy env with invalid runlist for project <%= openstack_project_name %> When I send PUT '/v2.0/project/<%= openstack_project_name %>' query with JSON body @@ -14,16 +14,7 @@ Feature: Create deploy env { "deploy_envs": [ <%= @formatter.json('deploy_env/openstack/valid', spaces: 8) %>, - { - "identifier": "test2", - "run_list": [ "wrong_role"], - "expires": null, - "provider": "openstack", - "users": [ "test" ], - "flavor": "test_flavor", - "image": "test_image", - "subnets": ["test_network"] - } + <%= @formatter.json('deploy_env/openstack/invalid/run_list', spaces: 8) %> ], "name": "<%= openstack_project_name %>" } @@ -38,16 +29,7 @@ Feature: Create deploy env { "deploy_envs": [ <%= precreated_openstack_deploy_env %>, - { - "identifier": "test2", - "run_list": [], - "expires": "10_wrong", - "provider": "openstack", - "users": [ "test" ], - "flavor": "test_flavor", - "image": "test_image", - "subnets": ["test_network"] - } + <%= @formatter.json('deploy_env/openstack/invalid/expires', spaces: 8) %> ], "name": "<%= openstack_project_name %>" } @@ -62,16 +44,7 @@ Feature: Create deploy env { "deploy_envs": [ <%= precreated_openstack_deploy_env %>, - { - "identifier": "test2", - "run_list": [], - "expires": null, - "provider": "openstack", - "users": [ "non_existing_user" ], - "flavor": "test_flavor", - "image": "test_image", - "subnets": ["test_network"] - } + <%= @formatter.json('deploy_env/openstack/invalid/users', spaces: 8) %> ], "name": "<%= openstack_project_name %>" } @@ -86,16 +59,7 @@ Feature: Create deploy env { "deploy_envs": [ <%= precreated_openstack_deploy_env %>, - { - "identifier": "test2", - "run_list": [ "role[test2_t2]" ], - "expires": null, - "provider": "openstack", - "users": [ "test" ], - "flavor": "wrong_flavor", - "image": "test_image", - "subnets": ["test_network"] - } + <%= @formatter.json('deploy_env/openstack/invalid/flavor', spaces: 8) %> ], "name": "<%= openstack_project_name %>" } @@ -110,16 +74,7 @@ Feature: Create deploy env { "deploy_envs": [ <%= precreated_openstack_deploy_env %>, - { - "identifier": "test2", - "run_list": [ "role[test2_t2]" ], - "expires": null, - "provider": "openstack", - "users": [ "test" ], - "flavor": "test_flavor", - "image": "wrong_image", - "subnets": ["test_network"] - } + <%= @formatter.json('deploy_env/openstack/invalid/image', spaces: 8) %> ], "name": "<%= openstack_project_name %>" } @@ -134,16 +89,7 @@ Feature: Create deploy env { "deploy_envs": [ <%= precreated_openstack_deploy_env %>, - { - "identifier": "test2", - "run_list": [ "role[test2_t2]" ], - "expires": null, - "provider": "openstack", - "users": [ "test" ], - "flavor": "test_flavor", - "image": "test_image", - "subnets": null - } + <%= @formatter.json('deploy_env/openstack/invalid/subnets_empty', spaces: 8) %> ], "name": "<%= openstack_project_name %>" } @@ -158,16 +104,7 @@ Feature: Create deploy env { "deploy_envs": [ <%= precreated_openstack_deploy_env %>, - { - "identifier": "test2", - "run_list": [ "role[test2_t2]" ], - "expires": null, - "provider": "openstack", - "users": [ "test" ], - "flavor": "test_flavor", - "image": "test_image", - "subnets": ["wrong_subnet"] - } + <%= @formatter.json('deploy_env/openstack/invalid/subnets_invalid', spaces: 8) %> ], "name": "<%= openstack_project_name %>" } @@ -175,6 +112,21 @@ Feature: Create deploy env Then response should be '400' And response error should be "Invalid subnets 'wrong_subnet'." + @openstack + Scenario: Send deploy env with invalid groups for project <%= openstack_project_name %> + When I send PUT '/v2.0/project/<%= openstack_project_name %>' query with JSON body + """ + { + "deploy_envs": [ + <%= precreated_openstack_deploy_env %>, + <%= @formatter.json('deploy_env/openstack/invalid/groups', spaces: 8) %> + ], + "name": "<%= openstack_project_name %>" + } + """ + Then response should be '400' + And response error should be "Invalid groups 'wrong_group'." + @openstack Scenario: Create deploy env for project <%= openstack_project_name %> @@ -183,16 +135,7 @@ Feature: Create deploy env { "deploy_envs": [ <%= precreated_openstack_deploy_env %>, - { - "identifier": "test2", - "run_list": [], - "expires": null, - "provider": "openstack", - "users": [ "test" ], - "flavor": "test_flavor", - "image": "test_image", - "subnets": ["test_network"] - } + <%= @formatter.json('deploy_env/openstack/valid_double', spaces: 8) %> ], "name": "<%= openstack_project_name %>" } @@ -204,7 +147,7 @@ Feature: Create deploy env #--------------------- <% static_project_name = @config["static"]["project"]["name"] %> - <% precreated_static_deploy_env = '{ "identifier": "test", "run_list": [], "expires": null, "provider": "static", "users": [ "test" ] }' %> + <% precreated_static_deploy_env = @formatter.json('deploy_env/static/valid', spaces: 8) %> @static Scenario: Send deploy env with invalid runlist for project <%= static_project_name %> When I send PUT '/v2.0/project/<%= static_project_name %>' query with JSON body @@ -212,20 +155,13 @@ Feature: Create deploy env { "deploy_envs": [ <%= precreated_static_deploy_env %>, - { - "identifier": "test2", - "run_list": [ - "wrongrole[test2_t2]" - ], - "expires": null, - "provider": "static", - "users": [ "test" ] - } + <%= @formatter.json('deploy_env/static/invalid/run_list', spaces: 8) %> ], "name": "<%= static_project_name %>" } """ Then response should be '400' + And response error should be "Invalid run list elements: 'wrong_role'. Each element should be role or recipe." @static Scenario: Send deploy env with invalid expiration for project <%= static_project_name %> @@ -234,18 +170,13 @@ Feature: Create deploy env { "deploy_envs": [ <%= precreated_static_deploy_env %>, - { - "identifier": "test2", - "run_list": [], - "expires": "10asd", - "provider": "static", - "users": [ "test" ] - } + <%= @formatter.json('deploy_env/static/invalid/expires', spaces: 8) %> ], "name": "<%= static_project_name %>" } """ Then response should be '400' + And response error should be "Parameter 'expires' is invalid. Valid format: [0-9]+[smhdw] or null." @static Scenario: Send deploy env with invalid user (missing in mongo) for project <%= static_project_name %> @@ -254,18 +185,13 @@ Feature: Create deploy env { "deploy_envs": [ <%= precreated_static_deploy_env %>, - { - "identifier": "test2", - "run_list": [], - "expires": null, - "provider": "static", - "users": [ "non_existing_user" ] - } + <%= @formatter.json('deploy_env/static/invalid/users', spaces: 8) %> ], "name": "<%= static_project_name %>" } """ Then response should be '400' + And response error should be "These users are missing in mongo: 'non_existing_user'." @static @@ -275,13 +201,7 @@ Feature: Create deploy env { "deploy_envs": [ <%= precreated_static_deploy_env %>, - { - "identifier": "test2", - "run_list": [], - "expires": null, - "provider": "static", - "users": [ "test" ] - } + <%= @formatter.json('deploy_env/static/valid_double', spaces: 8) %> ], "name": "<%= static_project_name %>" } diff --git a/devops-service/tests/templates/fixtures/deploy_env.yml b/devops-service/tests/templates/fixtures/deploy_env.yml index b06ef72..e93cc2d 100644 --- a/devops-service/tests/templates/fixtures/deploy_env.yml +++ b/devops-service/tests/templates/fixtures/deploy_env.yml @@ -1,14 +1,66 @@ openstack: valid: &valid - "identifier": "test" - "run_list": [] - "expires": "10d" - "provider": "openstack" - "users": [ "test" ] - "flavor": "test_flavor" - "image": "test_image" - "subnets": ["test_network"] + identifier: test + run_list: [] + expires: + provider: openstack + users: ['test'] + flavor: test_flavor + image: test_image + subnets: ['test_network'] + valid_double: + <<: *valid + identifier: test2 invalid: - run_list: + base: &invalid_base <<: *valid - "run_list": [ "wrong_role"] \ No newline at end of file + identifier: test2 + run_list: + <<: *invalid_base + run_list: ['wrong_role'] + expires: + <<: *invalid_base + expires: 10_wrong + users: + <<: *invalid_base + users: [ 'non_existing_user' ] + flavor: + <<: *invalid_base + flavor: wrong_flavor + image: + <<: *invalid_base + image: wrong_image + subnets_empty: + <<: *invalid_base + subnets: + subnets_invalid: + <<: *invalid_base + subnets: ['wrong_subnet'] + groups: + <<: *invalid_base + groups: ['wrong_group'] + + +static: + valid: &valid + identifier: test + run_list: [] + expires: + provider: static + users: [ 'test' ] + valid_double: + <<: *valid + identifier: test2 + invalid: + base: &invalid_base + <<: *valid + identifier: test2 + run_list: + <<: *invalid_base + run_list: ['wrong_role'] + expires: + <<: *invalid_base + expires: '10_wrong' + users: + <<: *invalid_base + users: [ 'non_existing_user' ]