Top Level Namespace
Defined Under Namespace
Modules: Miasma
Constant Summary collapse
- MIASMA_COMPUTE_ABSTRACT =
-> { # Required `let`s: # * compute: compute API # * build_args: server build arguments [Smash] describe Miasma::Models::Compute, :vcr do it "should provide #servers collection" do compute.servers.must_be_kind_of Miasma::Models::Compute::Servers end describe Miasma::Models::Compute::Servers do it "should provide instance class used within collection" do compute.servers.model.must_equal Miasma::Models::Compute::Server end it "should build new instance for collection" do instance = compute.servers.build(:name => "test") instance.must_be_kind_of Miasma::Models::Compute::Server end it "should provide #all servers" do compute.servers.all.must_be_kind_of Array end end describe Miasma::Models::Compute::Server do before do unless $miasma_instance VCR.use_cassette("Miasma_Models_Compute_Global/GLOBAL_compute_instance_create") do @instance = compute.servers.build(build_args) @instance.save until @instance.state == :running miasma_spec_sleep @instance.reload end $miasma_instance = @instance end Kernel.at_exit do VCR.use_cassette("Miasma_Models_Compute_Global/GLOBAL_compute_instance_destroy") do $miasma_instance.destroy end end else @instance = $miasma_instance end @instance.reload end let(:instance) { @instance } describe "instance methods" do it "should have a name" do instance.name.must_equal build_args[:name] end it "should have an image_id" do instance.image_id.must_equal build_args[:image_id] end it "should have a flavor_id" do instance.flavor_id.must_equal build_args[:flavor_id] end it "should have an address" do instance.addresses.detect do |addr| addr.version == 4 end.address.must_match /^(\d+)+\.(\d+)\.(\d+)\.(\d+)$/ end it "should have a status" do instance.status.wont_be_nil end it "should be in :running state" do instance.state.must_equal :running end end end describe "instance lifecycle" do it "should create new server, reload details and destroy server" do instance = compute.servers.build(build_args) instance.save instance.id.wont_be_nil instance.state.must_equal :pending compute.servers.reload.get(instance.id).wont_be_nil until instance.state == :running miasma_spec_sleep instance.reload end instance.state.must_equal :running instance.destroy while instance.state == :running miasma_spec_sleep instance.reload end [:pending, :terminated].must_include instance.state if instance.state == :pending until instance.state == :terminated miasma_spec_sleep instance.reload end instance.state.must_equal :terminated end end end end }
- MIASMA_STORAGE_ABSTRACT =
-> { # Required `let`s: # * storage: storage API describe Miasma::Models::Storage, :vcr do it "should provide #buckets collection" do storage.buckets.must_be_kind_of Miasma::Models::Storage::Buckets end describe Miasma::Models::Storage::Buckets do it "should provide instance class used within collection" do storage.buckets.model.must_equal Miasma::Models::Storage::Bucket end it "should build new instance for collection" do storage.buckets.build.must_be_kind_of Miasma::Models::Storage::Bucket end it "should provide #all buckets" do storage.buckets.all.must_be_kind_of Array end end describe Miasma::Models::Storage::Bucket do it "should act like a bucket" do bucket = storage.buckets.build(:name => "miasma-test-bucket-010") bucket.save bucket.reload # should include the bucket storage.buckets.reload.get("miasma-test-bucket-010").wont_be_nil # should have a name bucket.name.must_equal "miasma-test-bucket-010" # should have a #files collection bucket.files.must_be_kind_of Miasma::Models::Storage::Files #should provide #all files bucket.files.all.must_be_kind_of Array # should include reference to containing bucket bucket.files.bucket.must_equal bucket # should build new instance for collection bucket.files.build.must_be_kind_of Miasma::Models::Storage::File file_content = "blahblahblah" file = bucket.files.build file.name = "miasma-test-file" file.body = file_content file.save file.reload # should have a name file.name.must_equal "miasma-test-file" # should have a size file.size.must_equal file_content.size # should have an updated timestamp file.updated.must_be_kind_of Time # should create a valid url open(file.url).read.must_equal file_content # should have a body file.body.must_respond_to :readpartial file.body.readpartial(Miasma::Models::Storage::READ_BODY_CHUNK_SIZE).must_equal file_content file.destroy big_file_content = "*" * Miasma::Models::Storage::MAX_BODY_SIZE_FOR_STRINGIFY big_file = bucket.files.build big_file.name = "miasma-test-file-big" big_file.body = big_file_content big_file.save big_file.reload # should be the correct size big_file.size.must_equal big_file.size # should provide streaming body big_file.body.must_respond_to :readpartial content = big_file.body.readpartial(big_file.size) content.must_equal big_file_content big_file.destroy require "tempfile" local_io_file = Tempfile.new("miasma-storage-test") big_io_content = "*" * (Miasma::Models::Storage::MAX_BODY_SIZE_FOR_STRINGIFY * 1.3) local_io_file.write big_io_content local_io_file.flush local_io_file.rewind remote_file = bucket.files.build remote_file.name = "miasma-test-io-object-010" remote_file.body = local_io_file remote_file.save remote_file.reload # should be the correct size remote_file.size.must_equal local_io_file.size # should provide streaming body remote_file.body.must_respond_to :readpartial content = "" while chunk = remote_file.body.readpartial(1024) content << chunk end content.must_equal big_io_content remote_file.destroy bucket.destroy end end end }
- MIASMA_LOAD_BALANCER_ABSTRACT =
-> { # Required `let`s: # * load_balancer: load balancer API # * build_args: load balancer build arguments [Smash] describe Miasma::Models::LoadBalancer, :vcr do it "should provide #balancers collection" do load_balancer.balancers.must_be_kind_of Miasma::Models::LoadBalancer::Balancers end describe Miasma::Models::LoadBalancer::Balancers do it "should provide instance class used within collection" do load_balancer.balancers.model.must_equal Miasma::Models::LoadBalancer::Balancer end it "should build new instance for collection" do instance = load_balancer.balancers.build instance.must_be_kind_of Miasma::Models::LoadBalancer::Balancer end it "should provide #all balancers" do load_balancer.balancers.all.must_be_kind_of Array end end describe Miasma::Models::LoadBalancer::Balancer do before do unless $miasma_balancer VCR.use_cassette("Miasma_Models_LoadBalancer_Global/GLOBAL_load_balancer_create") do @balancer = load_balancer.balancers.build(build_args) @balancer.save until @balancer.state == :active miasma_spec_sleep @balancer.reload end $miasma_balancer = @balancer end Kernel.at_exit do VCR.use_cassette("Miasma_Models_LoadBalancer_Global/GLOBAL_load_balancer_destroy") do $miasma_balancer.destroy end end else @balancer = $miasma_balancer end @balancer.reload end let(:balancer) { @balancer } describe "collection" do it "should include balancer" do load_balancer.balancers.reload.get(balancer.id).wont_be_nil end end describe "balancer methods" do it "should have a name" do balancer.name.must_equal build_args[:name] end it "should be in :active state" do balancer.state.must_equal :active end it "should have a status" do balancer.status.wont_be_nil balancer.status.must_be_kind_of String end it "should have a public address" do balancer.public_addresses.wont_be :empty? end end end end }
- MIASMA_ORCHESTRATION_ABSTRACT =
-> { # Required `let`s: # * orchestration: orchestration API # * build_args: stack build arguments [Smash] describe Miasma::Models::Orchestration, :vcr do it "should provide #stacks collection" do orchestration.stacks.must_be_kind_of Miasma::Models::Orchestration::Stacks end describe Miasma::Models::Orchestration::Stacks do it "should provide instance class used within collection" do orchestration.stacks.model.must_equal Miasma::Models::Orchestration::Stack end it "should build new instance for collection" do instance = orchestration.stacks.build instance.must_be_kind_of Miasma::Models::Orchestration::Stack end it "should provide #all stacks" do orchestration.stacks.all.must_be_kind_of Array end end describe Miasma::Models::Orchestration::Stacks do before do unless $miasma_stack VCR.use_cassette("Miasma_Models_Orchestration_Global/GLOBAL_orchestration_stack_create") do @stack = orchestration.stacks.build(build_args) @stack.save Timeout.timeout(500) do until @stack.state == :create_complete miasma_spec_sleep @stack.reload end end @stack.template orchestration.stacks.reload $miasma_stack = @stack end Kernel.at_exit do VCR.use_cassette("Miasma_Models_Compute_Global/GLOBAL_orchestration_stack_destroy") do $miasma_stack.destroy end end else @stack = $miasma_stack end @stack.reload end let(:stack) { @stack } describe "collection" do it "should include stack" do orchestration.stacks.all.detect { |s| s.id == stack.id }.wont_be_nil orchestration.stacks.get(stack.id).wont_be_nil end end describe "instance methods" do it "should have a name" do stack.name.must_equal build_args[:name] end it "should be in :create_complete state" do stack.state.must_equal :create_complete end it "should have a status" do stack.status.must_be_kind_of String end it "should have a creation time" do stack.created.must_be_kind_of Time end it "should have parameters used for creation" do stack.parameters.to_smash.must_equal build_args[:parameters].to_smash end it "should include the templated used for creation" do stack.template.to_smash.must_equal build_args[:template].to_smash end end end describe "instance lifecycle" do it "should create new stack, reload details and destroy stack" do stack = orchestration.stacks.build(build_args.merge(:name => "miasma-test-stack-2")) stack.save stack.id.wont_be_nil stack.state.must_equal :create_in_progress orchestration.stacks.reload.get(stack.id).wont_be_nil until stack.state == :create_complete miasma_spec_sleep stack.reload end stack.state.must_equal :create_complete stack.destroy [:delete_in_progress, :delete_complete].must_include stack.state Timeout.timeout(500) do until stack.state == :delete_complete miasma_spec_sleep stack.reload end end stack.state.must_equal :delete_complete end end end }
Instance Method Summary collapse
Instance Method Details
#miasma_spec_sleep(interval = 20) ⇒ Object
6 7 8 9 10 11 12 |
# File 'lib/miasma/specs.rb', line 6 def miasma_spec_sleep(interval = 20) if ENV["MIASMA_TEST_LIVE_REQUESTS"] sleep(20) else sleep(0.1) end end |