From b09fab680d2d2b3bd572479151d9b38545736830 Mon Sep 17 00:00:00 2001 From: Anton Chuchkalov Date: Thu, 2 Jul 2015 20:17:25 +0400 Subject: [PATCH] new stubbing approach --- devops-service/devops-service.rb | 20 ------------------- devops-service/lib/stubber.rb | 9 +++++++++ devops-service/providers/all.rb | 13 ------------ devops-service/providers/provider_factory.rb | 15 +++++++++++--- devops-service/routes/v2.0.rb | 5 +++++ devops-service/tests/config/cucumber.yml | 1 + .../stubs/models/stack/stack_openstack.rb | 13 ++++++++++++ .../stubs/providers/ec2.rb} | 10 ++++------ .../stubs/providers/openstack.rb} | 13 +----------- 9 files changed, 45 insertions(+), 54 deletions(-) create mode 100644 devops-service/lib/stubber.rb delete mode 100644 devops-service/providers/all.rb create mode 100644 devops-service/tests/config/cucumber.yml create mode 100644 devops-service/tests/stubs/models/stack/stack_openstack.rb rename devops-service/{providers/ec2_stub.rb => tests/stubs/providers/ec2.rb} (87%) rename devops-service/{providers/openstack_stub.rb => tests/stubs/providers/openstack.rb} (81%) diff --git a/devops-service/devops-service.rb b/devops-service/devops-service.rb index 7d1115a..f71a22c 100644 --- a/devops-service/devops-service.rb +++ b/devops-service/devops-service.rb @@ -62,26 +62,6 @@ class DevopsService def debug? DevopsConfig.config[:debug] end - - # you could check env via - # DevopsService.env.development? or - # DevopsService.env.test? or - # DevopsService.env.production? - def self.env - unless @env - @env = DevopsConfig.config[:env].dup - def @env.test? - self == 'test' - end - def @env.development? - self == 'development' - end - def @env.production? - self == 'production' - end - end - @env - end end def self.create_method name, &block diff --git a/devops-service/lib/stubber.rb b/devops-service/lib/stubber.rb new file mode 100644 index 0000000..8472125 --- /dev/null +++ b/devops-service/lib/stubber.rb @@ -0,0 +1,9 @@ +module Stubber + def self.stub_providers! + Dir["tests/stubs/providers/*.rb"].each {|file| require file } + end + + def self.stub_models! + Dir["tests/stubs/models/*.rb"].each {|file| require file } + end +end diff --git a/devops-service/providers/all.rb b/devops-service/providers/all.rb deleted file mode 100644 index 80e40a7..0000000 --- a/devops-service/providers/all.rb +++ /dev/null @@ -1,13 +0,0 @@ -["ec2", "openstack", "static"].each do |provider| - begin - require_relative provider - - provider_stub_path = File.expand_path("../#{provider}_stub.rb", __FILE__) - - if DevopsService.debug? && File.exists?(provider_stub_path) - require provider_stub_path - end - rescue LoadError => e - puts "Can not load provider '#{provider}': " + e.message - end -end diff --git a/devops-service/providers/provider_factory.rb b/devops-service/providers/provider_factory.rb index 05a1711..ff89d75 100644 --- a/devops-service/providers/provider_factory.rb +++ b/devops-service/providers/provider_factory.rb @@ -1,7 +1,7 @@ require "sinatra" module Provider - class ProviderFactory + module ProviderFactory @@providers = {} @@ -20,9 +20,8 @@ module Provider end def self.init conf - # require providers here to get access to debug properties - require 'providers/all' + require_all ["ec2", "openstack", "static"].each do |p| begin @@ -38,5 +37,15 @@ module Provider end end + def self.require_all + ["ec2", "openstack", "static"].each do |provider| + begin + require_relative provider + rescue LoadError => e + puts "Can not load provider '#{provider}': " + e.message + end + end + end + end end diff --git a/devops-service/routes/v2.0.rb b/devops-service/routes/v2.0.rb index aa340b1..2826287 100644 --- a/devops-service/routes/v2.0.rb +++ b/devops-service/routes/v2.0.rb @@ -41,6 +41,7 @@ require "routes/v2.0/handlers/stack_template" require "routes/v2.0/handlers/stack_template_preset" require "routes/v2.0/handlers/stack" require "routes/routes_container" +require 'lib/stubber' require "auth/devops_auth" @@ -85,6 +86,10 @@ module Devops ::Provider::ProviderFactory.init(config) #set_up_providers_keys!(::Provider::ProviderFactory.all, mongo) + if settings.test? || config[:stub_classes] + Stubber.stub_providers! + Stubber.stub_models! + end end def init_mongo diff --git a/devops-service/tests/config/cucumber.yml b/devops-service/tests/config/cucumber.yml new file mode 100644 index 0000000..2903d2e --- /dev/null +++ b/devops-service/tests/config/cucumber.yml @@ -0,0 +1 @@ +default: -r features \ No newline at end of file diff --git a/devops-service/tests/stubs/models/stack/stack_openstack.rb b/devops-service/tests/stubs/models/stack/stack_openstack.rb new file mode 100644 index 0000000..63cd4a5 --- /dev/null +++ b/devops-service/tests/stubs/models/stack/stack_openstack.rb @@ -0,0 +1,13 @@ +puts '!!! WARNING: Some StackOpenstack methods are stubbed' + +class StackOpenstack < StackBase + def create_stack_in_cloud! + self.cloud_stack_id = '4c712026-dcd5-4664-90b8-0915494c1332' + end + + + def delete_stack_in_cloud! + true + end + +end diff --git a/devops-service/providers/ec2_stub.rb b/devops-service/tests/stubs/providers/ec2.rb similarity index 87% rename from devops-service/providers/ec2_stub.rb rename to devops-service/tests/stubs/providers/ec2.rb index 76afba8..a1fd0be 100644 --- a/devops-service/providers/ec2_stub.rb +++ b/devops-service/tests/stubs/providers/ec2.rb @@ -1,7 +1,4 @@ -# Stub some methods in Ec2 Provider - -puts '!!! WARNING !!!' -puts '!!! Some EC2 methods are stubbed !!!' +puts '!!! WARNING: Some EC2 methods are stubbed' class Provider::Ec2 @@ -31,9 +28,10 @@ class Provider::Ec2 def flavors [{ "id" => 'test_flavor', - "v_cpus" => 2, + "cores" => 2, "ram" => 256, - "disk" => 1000 + "disk" => 1000, + "name" => 'name' }] end diff --git a/devops-service/providers/openstack_stub.rb b/devops-service/tests/stubs/providers/openstack.rb similarity index 81% rename from devops-service/providers/openstack_stub.rb rename to devops-service/tests/stubs/providers/openstack.rb index bdb28eb..e0698f3 100644 --- a/devops-service/providers/openstack_stub.rb +++ b/devops-service/tests/stubs/providers/openstack.rb @@ -1,7 +1,4 @@ -# Stub some methods in Openstack Provider - -puts '!!! WARNING !!!' -puts '!!! Some Openstack methods are stubbed !!!' +puts '!!! WARNING: Some Openstack methods are stubbed' class Provider::Openstack @@ -61,12 +58,4 @@ class Provider::Openstack ] end - def create_stack(stack) - '4c712026-dcd5-4664-90b8-0915494c1332' - end - - def delete_stack(stack) - true - end - end \ No newline at end of file