cuboid 0.2.11 → 0.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/cuboid/rest/server/routes/instances.rb +25 -0
- data/lib/cuboid/rpc/server/application_wrapper.rb +5 -4
- data/lib/cuboid/rpc/server/instance.rb +8 -1
- data/lib/cuboid/state/application.rb +1 -0
- data/lib/version +1 -1
- data/spec/cuboid/rest/server_spec.rb +73 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 1c60a30f1e751d2c66d99373ad8f928e0ba903ee49cfc2d3af4f9913cf77e35e
         | 
| 4 | 
            +
              data.tar.gz: 39fb0c5585c7f164df0fbbf378aebd8347a9f6037cc5e68f0cc3cf24166f277e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 978048c874d5735f231adecf85777d9a091709203616bc30ca37d58d98a0e93e42ccf4d8d88d1454367118a09b94ac249cf79fccc37027ba280e4f097fde7e73
         | 
| 7 | 
            +
              data.tar.gz: a2304bb473bce181b003a0d173ac6920ad1dbb8b03eb695befff39eb0d559c4a1cb3b057dfd19b10093396d23b7a7f20f4eccfa9ba549eacb1dc37f977719e22
         | 
| @@ -32,6 +32,23 @@ module Instances | |
| 32 32 | 
             
                        json id: instance.token
         | 
| 33 33 | 
             
                    end
         | 
| 34 34 |  | 
| 35 | 
            +
                    app.post '/instances/restore' do
         | 
| 36 | 
            +
                        max_utilization! if !agent && System.max_utilization?
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                        options = ::JSON.load( request.body.read ) || {}
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                        instance = get_instance
         | 
| 41 | 
            +
                        max_utilization! if !instance
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                        handle_error proc { instance.shutdown } do
         | 
| 44 | 
            +
                            instance.restore!( options['session'] )
         | 
| 45 | 
            +
                        end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                        instances[instance.token] = instance
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                        json id: instance.token
         | 
| 50 | 
            +
                    end
         | 
| 51 | 
            +
             | 
| 35 52 | 
             
                    # Progress
         | 
| 36 53 | 
             
                    app.get '/instances/:instance' do
         | 
| 37 54 | 
             
                        ensure_instance!
         | 
| @@ -106,6 +123,14 @@ module Instances | |
| 106 123 | 
             
                        end
         | 
| 107 124 | 
             
                    end
         | 
| 108 125 |  | 
| 126 | 
            +
                    app.put '/instances/:instance/abort' do
         | 
| 127 | 
            +
                        ensure_instance!
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                        instance_for( params[:instance] ) do |instance|
         | 
| 130 | 
            +
                            json instance.abort!
         | 
| 131 | 
            +
                        end
         | 
| 132 | 
            +
                    end
         | 
| 133 | 
            +
             | 
| 109 134 | 
             
                    # Abort/shutdown
         | 
| 110 135 | 
             
                    app.delete '/instances/:instance' do
         | 
| 111 136 | 
             
                        ensure_instance!
         | 
| @@ -44,7 +44,7 @@ class ApplicationWrapper | |
| 44 44 | 
             
                #   `true` If the system is scanning, `false` if {#run} hasn't been called
         | 
| 45 45 | 
             
                #   yet or if the scan has finished.
         | 
| 46 46 | 
             
                def busy?
         | 
| 47 | 
            -
                    ![:ready, :done, :suspended].include?( @application.status ) &&
         | 
| 47 | 
            +
                    ![:ready, :done, :suspended, :aborted].include?( @application.status ) &&
         | 
| 48 48 | 
             
                      !!@extended_running
         | 
| 49 49 | 
             
                end
         | 
| 50 50 |  | 
| @@ -58,6 +58,7 @@ class ApplicationWrapper | |
| 58 58 | 
             
                    # Start the scan  -- we can't block the RPC server so we're using a Thread.
         | 
| 59 59 | 
             
                    Thread.new do
         | 
| 60 60 | 
             
                        @application.run
         | 
| 61 | 
            +
                        @extended_running = false
         | 
| 61 62 | 
             
                    end
         | 
| 62 63 |  | 
| 63 64 | 
             
                    true
         | 
| @@ -66,10 +67,10 @@ class ApplicationWrapper | |
| 66 67 | 
             
                def clean_up
         | 
| 67 68 | 
             
                    return false if @rpc_cleaned_up
         | 
| 68 69 |  | 
| 70 | 
            +
                    @application.clean_up
         | 
| 71 | 
            +
             | 
| 69 72 | 
             
                    @rpc_cleaned_up   = true
         | 
| 70 73 | 
             
                    @extended_running = false
         | 
| 71 | 
            -
             | 
| 72 | 
            -
                    @application.clean_up
         | 
| 73 74 | 
             
                end
         | 
| 74 75 |  | 
| 75 76 | 
             
                # @param    [Integer]   starting_line
         | 
| @@ -109,7 +110,7 @@ class ApplicationWrapper | |
| 109 110 |  | 
| 110 111 | 
             
                    data = {
         | 
| 111 112 | 
             
                        status:         status,
         | 
| 112 | 
            -
                        busy:            | 
| 113 | 
            +
                        busy:           @extended_running,
         | 
| 113 114 | 
             
                        application:    @application.class.to_s,
         | 
| 114 115 | 
             
                        seed:           Utilities.random_seed,
         | 
| 115 116 | 
             
                        agent_url: Cuboid::Options.agent.url,
         | 
| @@ -103,8 +103,15 @@ class Instance | |
| 103 103 | 
             
                # @see #suspend
         | 
| 104 104 | 
             
                # @see #snapshot_path
         | 
| 105 105 | 
             
                def restore!( snapshot )
         | 
| 106 | 
            +
                    # If the instance isn't clean bail out now.
         | 
| 107 | 
            +
                    return false if busy? || @called
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                    @called = @run_initializing = true
         | 
| 110 | 
            +
             | 
| 106 111 | 
             
                    Thread.new do
         | 
| 107 | 
            -
                        @application.restore!( snapshot ) | 
| 112 | 
            +
                        @application.restore!( snapshot )
         | 
| 113 | 
            +
                        @application.run
         | 
| 114 | 
            +
                        @run_initializing = false
         | 
| 108 115 | 
             
                    end
         | 
| 109 116 |  | 
| 110 117 | 
             
                    true
         | 
    
        data/lib/version
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.2. | 
| 1 | 
            +
            0.2.12
         | 
| @@ -251,6 +251,26 @@ describe Cuboid::Rest::Server do | |
| 251 251 | 
             
                    end
         | 
| 252 252 | 
             
                end
         | 
| 253 253 |  | 
| 254 | 
            +
                describe 'POST /instances/restore' do
         | 
| 255 | 
            +
                    let(:tpl_url) { '/instances/restore' }
         | 
| 256 | 
            +
             | 
| 257 | 
            +
                    it 'creates an instance from a restores session'
         | 
| 258 | 
            +
             | 
| 259 | 
            +
                    context 'when given invalid options' do
         | 
| 260 | 
            +
                        it 'returns a 500'
         | 
| 261 | 
            +
             | 
| 262 | 
            +
                        it 'does not list the instance on the index'
         | 
| 263 | 
            +
                    end
         | 
| 264 | 
            +
             | 
| 265 | 
            +
                    context 'when the system is at max utilization' do
         | 
| 266 | 
            +
                        it 'returns a 503'
         | 
| 267 | 
            +
                    end
         | 
| 268 | 
            +
             | 
| 269 | 
            +
                    context 'when a Agent has been set' do
         | 
| 270 | 
            +
                        it 'uses it'
         | 
| 271 | 
            +
                    end
         | 
| 272 | 
            +
                end
         | 
| 273 | 
            +
             | 
| 254 274 | 
             
                describe 'GET /instances/:instance' do
         | 
| 255 275 | 
             
                    let(:tpl_url) { '/instances/%s' }
         | 
| 256 276 |  | 
| @@ -567,7 +587,59 @@ describe Cuboid::Rest::Server do | |
| 567 587 | 
             
                        end
         | 
| 568 588 | 
             
                    end
         | 
| 569 589 | 
             
                end
         | 
| 570 | 
            -
             | 
| 590 | 
            +
             | 
| 591 | 
            +
                describe 'PUT /instances/:instance/abort' do
         | 
| 592 | 
            +
                    let(:tpl_url) { '/instances/%s/abort' }
         | 
| 593 | 
            +
             | 
| 594 | 
            +
                    before do
         | 
| 595 | 
            +
                        @id = create_instance
         | 
| 596 | 
            +
                    end
         | 
| 597 | 
            +
             | 
| 598 | 
            +
                    it 'aborts the instance' do
         | 
| 599 | 
            +
                        put url
         | 
| 600 | 
            +
                        expect(response_code).to eq 200
         | 
| 601 | 
            +
             | 
| 602 | 
            +
                        get "/instances/#{id}"
         | 
| 603 | 
            +
                        expect(['aborting', 'aborted']).to include response_data['status']
         | 
| 604 | 
            +
                    end
         | 
| 605 | 
            +
             | 
| 606 | 
            +
                    context 'when passed a non-existent id' do
         | 
| 607 | 
            +
                        let(:id) { non_existent_id }
         | 
| 608 | 
            +
             | 
| 609 | 
            +
                        it 'returns 404' do
         | 
| 610 | 
            +
                            put url
         | 
| 611 | 
            +
                            expect(response_code).to eq 404
         | 
| 612 | 
            +
                        end
         | 
| 613 | 
            +
                    end
         | 
| 614 | 
            +
             | 
| 615 | 
            +
                    context 'when the instance is from the Scheduler' do
         | 
| 616 | 
            +
                        before do
         | 
| 617 | 
            +
                            put '/scheduler/url', scheduler.url
         | 
| 618 | 
            +
                        end
         | 
| 619 | 
            +
             | 
| 620 | 
            +
                        it 'includes it' do
         | 
| 621 | 
            +
                            @id = scheduler.push( options )
         | 
| 622 | 
            +
                            sleep 0.1 while scheduler.running.empty?
         | 
| 623 | 
            +
             | 
| 624 | 
            +
                            put url
         | 
| 625 | 
            +
                            expect(response_code).to eq 200
         | 
| 626 | 
            +
             | 
| 627 | 
            +
                            get "/instances/#{id}"
         | 
| 628 | 
            +
                            expect(['aborting', 'aborted']).to include response_data['status']
         | 
| 629 | 
            +
                        end
         | 
| 630 | 
            +
             | 
| 631 | 
            +
                        context 'when the instance completes' do
         | 
| 632 | 
            +
                            it 'is removed' do
         | 
| 633 | 
            +
                                @id = scheduler.push( options )
         | 
| 634 | 
            +
                                sleep 0.1 while scheduler.completed.empty?
         | 
| 635 | 
            +
             | 
| 636 | 
            +
                                put url
         | 
| 637 | 
            +
                                expect(response_code).to be 404
         | 
| 638 | 
            +
                            end
         | 
| 639 | 
            +
                        end
         | 
| 640 | 
            +
                    end
         | 
| 641 | 
            +
                end
         | 
| 642 | 
            +
             | 
| 571 643 | 
             
                describe 'DELETE /instances/:instance' do
         | 
| 572 644 | 
             
                    let(:tpl_url) { '/instances/%s' }
         | 
| 573 645 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: cuboid
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.12
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Tasos Laskos
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2025-01-11 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: awesome_print
         |