complete tests for openstack deploy_envs validation
This commit is contained in:
parent
fc662ff519
commit
f6aad954e2
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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!({
|
||||||
|
|||||||
@ -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
|
||||||
@ -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 %>"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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' ]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user