complete tests for openstack deploy_envs validation

This commit is contained in:
Anton Chuchkalov 2014-11-28 16:12:07 +04:00
parent fc662ff519
commit f6aad954e2
5 changed files with 104 additions and 141 deletions

View File

@ -20,8 +20,13 @@ class DeployEnvBase < MongoModel
def validate! def validate!
super super
self.class.validators.each do |validator| begin
validator.new(self).validate! 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
end end

View File

@ -21,7 +21,8 @@ class DeployEnvOpenstack < DeployEnvBase
::Validators::DeployEnv::Flavor, ::Validators::DeployEnv::Flavor,
::Validators::DeployEnv::Image, ::Validators::DeployEnv::Image,
::Validators::DeployEnv::SubnetNotEmpty, ::Validators::DeployEnv::SubnetNotEmpty,
::Validators::DeployEnv::SubnetBelongsToProvider ::Validators::DeployEnv::SubnetBelongsToProvider,
::Validators::DeployEnv::Groups
def initialize d={} def initialize d={}
super(d) super(d)
@ -33,21 +34,6 @@ class DeployEnvOpenstack < DeployEnvBase
self.groups = (b.is_a?(Array) ? b.uniq : b) self.groups = (b.is_a?(Array) ? b.uniq : b)
end 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 def to_hash
h = super h = super
h.merge!({ h.merge!({

View File

@ -8,7 +8,7 @@ module Validators
end end
def message def message
"Invalid groups '#{@invalid_groups.join("', '")}'" "Invalid groups '#{@invalid_groups.join("', '")}'."
end end
end end
end end

View File

@ -6,7 +6,7 @@ Feature: Create deploy env
#--------------------- #---------------------
<% openstack_project_name = @config["openstack"]["project"]["name"] %> <% 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 @openstack
Scenario: Send deploy env with invalid runlist for project <%= openstack_project_name %> 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 When I send PUT '/v2.0/project/<%= openstack_project_name %>' query with JSON body
@ -14,16 +14,7 @@ Feature: Create deploy env
{ {
"deploy_envs": [ "deploy_envs": [
<%= @formatter.json('deploy_env/openstack/valid', spaces: 8) %>, <%= @formatter.json('deploy_env/openstack/valid', spaces: 8) %>,
{ <%= @formatter.json('deploy_env/openstack/invalid/run_list', spaces: 8) %>
"identifier": "test2",
"run_list": [ "wrong_role"],
"expires": null,
"provider": "openstack",
"users": [ "test" ],
"flavor": "test_flavor",
"image": "test_image",
"subnets": ["test_network"]
}
], ],
"name": "<%= openstack_project_name %>" "name": "<%= openstack_project_name %>"
} }
@ -38,16 +29,7 @@ Feature: Create deploy env
{ {
"deploy_envs": [ "deploy_envs": [
<%= precreated_openstack_deploy_env %>, <%= precreated_openstack_deploy_env %>,
{ <%= @formatter.json('deploy_env/openstack/invalid/expires', spaces: 8) %>
"identifier": "test2",
"run_list": [],
"expires": "10_wrong",
"provider": "openstack",
"users": [ "test" ],
"flavor": "test_flavor",
"image": "test_image",
"subnets": ["test_network"]
}
], ],
"name": "<%= openstack_project_name %>" "name": "<%= openstack_project_name %>"
} }
@ -62,16 +44,7 @@ Feature: Create deploy env
{ {
"deploy_envs": [ "deploy_envs": [
<%= precreated_openstack_deploy_env %>, <%= precreated_openstack_deploy_env %>,
{ <%= @formatter.json('deploy_env/openstack/invalid/users', spaces: 8) %>
"identifier": "test2",
"run_list": [],
"expires": null,
"provider": "openstack",
"users": [ "non_existing_user" ],
"flavor": "test_flavor",
"image": "test_image",
"subnets": ["test_network"]
}
], ],
"name": "<%= openstack_project_name %>" "name": "<%= openstack_project_name %>"
} }
@ -86,16 +59,7 @@ Feature: Create deploy env
{ {
"deploy_envs": [ "deploy_envs": [
<%= precreated_openstack_deploy_env %>, <%= precreated_openstack_deploy_env %>,
{ <%= @formatter.json('deploy_env/openstack/invalid/flavor', spaces: 8) %>
"identifier": "test2",
"run_list": [ "role[test2_t2]" ],
"expires": null,
"provider": "openstack",
"users": [ "test" ],
"flavor": "wrong_flavor",
"image": "test_image",
"subnets": ["test_network"]
}
], ],
"name": "<%= openstack_project_name %>" "name": "<%= openstack_project_name %>"
} }
@ -110,16 +74,7 @@ Feature: Create deploy env
{ {
"deploy_envs": [ "deploy_envs": [
<%= precreated_openstack_deploy_env %>, <%= precreated_openstack_deploy_env %>,
{ <%= @formatter.json('deploy_env/openstack/invalid/image', spaces: 8) %>
"identifier": "test2",
"run_list": [ "role[test2_t2]" ],
"expires": null,
"provider": "openstack",
"users": [ "test" ],
"flavor": "test_flavor",
"image": "wrong_image",
"subnets": ["test_network"]
}
], ],
"name": "<%= openstack_project_name %>" "name": "<%= openstack_project_name %>"
} }
@ -134,16 +89,7 @@ Feature: Create deploy env
{ {
"deploy_envs": [ "deploy_envs": [
<%= precreated_openstack_deploy_env %>, <%= precreated_openstack_deploy_env %>,
{ <%= @formatter.json('deploy_env/openstack/invalid/subnets_empty', spaces: 8) %>
"identifier": "test2",
"run_list": [ "role[test2_t2]" ],
"expires": null,
"provider": "openstack",
"users": [ "test" ],
"flavor": "test_flavor",
"image": "test_image",
"subnets": null
}
], ],
"name": "<%= openstack_project_name %>" "name": "<%= openstack_project_name %>"
} }
@ -158,16 +104,7 @@ Feature: Create deploy env
{ {
"deploy_envs": [ "deploy_envs": [
<%= precreated_openstack_deploy_env %>, <%= precreated_openstack_deploy_env %>,
{ <%= @formatter.json('deploy_env/openstack/invalid/subnets_invalid', spaces: 8) %>
"identifier": "test2",
"run_list": [ "role[test2_t2]" ],
"expires": null,
"provider": "openstack",
"users": [ "test" ],
"flavor": "test_flavor",
"image": "test_image",
"subnets": ["wrong_subnet"]
}
], ],
"name": "<%= openstack_project_name %>" "name": "<%= openstack_project_name %>"
} }
@ -175,6 +112,21 @@ Feature: Create deploy env
Then response should be '400' Then response should be '400'
And response error should be "Invalid subnets 'wrong_subnet'." 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 @openstack
Scenario: Create deploy env for project <%= openstack_project_name %> Scenario: Create deploy env for project <%= openstack_project_name %>
@ -183,16 +135,7 @@ Feature: Create deploy env
{ {
"deploy_envs": [ "deploy_envs": [
<%= precreated_openstack_deploy_env %>, <%= precreated_openstack_deploy_env %>,
{ <%= @formatter.json('deploy_env/openstack/valid_double', spaces: 8) %>
"identifier": "test2",
"run_list": [],
"expires": null,
"provider": "openstack",
"users": [ "test" ],
"flavor": "test_flavor",
"image": "test_image",
"subnets": ["test_network"]
}
], ],
"name": "<%= openstack_project_name %>" "name": "<%= openstack_project_name %>"
} }
@ -204,7 +147,7 @@ Feature: Create deploy env
#--------------------- #---------------------
<% static_project_name = @config["static"]["project"]["name"] %> <% 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 @static
Scenario: Send deploy env with invalid runlist for project <%= static_project_name %> 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 When I send PUT '/v2.0/project/<%= static_project_name %>' query with JSON body
@ -212,20 +155,13 @@ Feature: Create deploy env
{ {
"deploy_envs": [ "deploy_envs": [
<%= precreated_static_deploy_env %>, <%= precreated_static_deploy_env %>,
{ <%= @formatter.json('deploy_env/static/invalid/run_list', spaces: 8) %>
"identifier": "test2",
"run_list": [
"wrongrole[test2_t2]"
],
"expires": null,
"provider": "static",
"users": [ "test" ]
}
], ],
"name": "<%= static_project_name %>" "name": "<%= static_project_name %>"
} }
""" """
Then response should be '400' Then response should be '400'
And response error should be "Invalid run list elements: 'wrong_role'. Each element should be role or recipe."
@static @static
Scenario: Send deploy env with invalid expiration for project <%= static_project_name %> Scenario: Send deploy env with invalid expiration for project <%= static_project_name %>
@ -234,18 +170,13 @@ Feature: Create deploy env
{ {
"deploy_envs": [ "deploy_envs": [
<%= precreated_static_deploy_env %>, <%= precreated_static_deploy_env %>,
{ <%= @formatter.json('deploy_env/static/invalid/expires', spaces: 8) %>
"identifier": "test2",
"run_list": [],
"expires": "10asd",
"provider": "static",
"users": [ "test" ]
}
], ],
"name": "<%= static_project_name %>" "name": "<%= static_project_name %>"
} }
""" """
Then response should be '400' Then response should be '400'
And response error should be "Parameter 'expires' is invalid. Valid format: [0-9]+[smhdw] or null."
@static @static
Scenario: Send deploy env with invalid user (missing in mongo) for project <%= static_project_name %> 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": [ "deploy_envs": [
<%= precreated_static_deploy_env %>, <%= precreated_static_deploy_env %>,
{ <%= @formatter.json('deploy_env/static/invalid/users', spaces: 8) %>
"identifier": "test2",
"run_list": [],
"expires": null,
"provider": "static",
"users": [ "non_existing_user" ]
}
], ],
"name": "<%= static_project_name %>" "name": "<%= static_project_name %>"
} }
""" """
Then response should be '400' Then response should be '400'
And response error should be "These users are missing in mongo: 'non_existing_user'."
@static @static
@ -275,13 +201,7 @@ Feature: Create deploy env
{ {
"deploy_envs": [ "deploy_envs": [
<%= precreated_static_deploy_env %>, <%= precreated_static_deploy_env %>,
{ <%= @formatter.json('deploy_env/static/valid_double', spaces: 8) %>
"identifier": "test2",
"run_list": [],
"expires": null,
"provider": "static",
"users": [ "test" ]
}
], ],
"name": "<%= static_project_name %>" "name": "<%= static_project_name %>"
} }

View File

@ -1,14 +1,66 @@
openstack: openstack:
valid: &valid valid: &valid
"identifier": "test" identifier: test
"run_list": [] run_list: []
"expires": "10d" expires:
"provider": "openstack" provider: openstack
"users": [ "test" ] users: ['test']
"flavor": "test_flavor" flavor: test_flavor
"image": "test_image" image: test_image
"subnets": ["test_network"] subnets: ['test_network']
valid_double:
<<: *valid
identifier: test2
invalid: invalid:
run_list: base: &invalid_base
<<: *valid <<: *valid
"run_list": [ "wrong_role"] 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' ]