diff --git a/tasks/test.rake b/tasks/test.rake index 3f7079cf92..cb8a77c39a 100644 --- a/tasks/test.rake +++ b/tasks/test.rake @@ -1,7 +1,7 @@ require "rake/testtask" Rake::TestTask.new do |t| - t.description = "Run all integration tests" + t.description = "Run integration and unit tests" t.libs << "test" t.pattern = File.join("test", "**", "test_*.rb") t.warning = false @@ -10,7 +10,7 @@ end namespace :test do mock = ENV["FOG_MOCK"] || "true" task :travis do - sh("export FOG_MOCK=#{mock} && bundle exec shindont") + sh("bundle exec rake test:unit") end desc "Run all integration tests in parallel" @@ -19,6 +19,16 @@ namespace :test do "test:pubsub", "test:sql", "test:storage"] + + Rake::TestTask.new do |t| + t.name = "unit" + t.description = "Run Unit tests" + t.libs << "test" + t.pattern = FileList['test/unit/**/test_*.rb'] + t.warning = false + t.verbose = true + end + Rake::TestTask.new do |t| t.name = "compute" t.description = "Run Compute API tests" diff --git a/test/unit/compute/test_common_collections.rb b/test/unit/compute/test_common_collections.rb new file mode 100644 index 0000000000..a07e9e08b6 --- /dev/null +++ b/test/unit/compute/test_common_collections.rb @@ -0,0 +1,31 @@ +require "helpers/test_helper" + +class UnitTestCollections < MiniTest::Test + def setup + Fog.mock! + @client = Fog::Compute.new(:provider => "Google", :google_project => "foo") + + # Top-level ancestors we do not dest + common_ancestors = [Fog::Collection, Fog::Association, Fog::PagedCollection] + # Projects do not have a "list" method in compute API + exceptions = [Fog::Compute::Google::Projects] + # Enumerate all descendants of Fog::Collection + descendants = ObjectSpace.each_object(Fog::Collection.singleton_class).to_a + + @collections = descendants - common_ancestors - exceptions + end + + def teardown + Fog.unmock! + end + + def test_common_methods + # This tests whether Fog::Compute::Google collections have common lifecycle methods + @collections.each do |klass| + obj = klass.new + assert obj.respond_to?(:all), "#{klass} should have an .all method" + assert obj.respond_to?(:get), "#{klass} should have a .get method" + assert obj.respond_to?(:each), "#{klass} should behave like Enumerable" + end + end +end diff --git a/test/unit/compute/test_common_models.rb b/test/unit/compute/test_common_models.rb new file mode 100644 index 0000000000..d830538475 --- /dev/null +++ b/test/unit/compute/test_common_models.rb @@ -0,0 +1,36 @@ +require "helpers/test_helper" + +class UnitTestModels < MiniTest::Test + def setup + Fog.mock! + @client = Fog::Compute.new(:provider => "Google", :google_project => "foo") + + # Top-level ancestors we do not test + common_ancestors = [Fog::Model, Fog::Compute::Server] + # Do not test models that do not have a create method in API + exceptions = [ Fog::Compute::Google::MachineType, + Fog::Compute::Google::Region, + Fog::Compute::Google::DiskType, + Fog::Compute::Google::Operation, + Fog::Compute::Google::Zone, + Fog::Compute::Google::Snapshot, + Fog::Compute::Google::Project ] + # Enumerate all descendants of Fog::Model + descendants = ObjectSpace.each_object(Fog::Model.singleton_class).to_a + + @models = descendants - common_ancestors - exceptions + end + + def teardown + Fog.unmock! + end + + def test_common_methods + # This tests whether Fog::Compute::Google models have common lifecycle methods + @models.each do |klass| + obj = klass.new + assert obj.respond_to?(:save), "#{klass} should have a .save method" + assert obj.respond_to?(:destroy), "#{klass} should have a .destroy method" + end + end +end