mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 10:08:40 -05:00
This change updates handling of pool aliases to allow for more than a single pool to be configured as an alias pool. Without this change if multiple pools are configured as an alias the last one to configure it is set as the alias for that pool. Additionally, redis testing requirements are removed in favor of mock_redis. Without this change a redis server is required to run vmpooler tests.
167 lines
5 KiB
Ruby
167 lines
5 KiB
Ruby
require 'spec_helper'
|
|
require 'rack/test'
|
|
|
|
describe Vmpooler::API do
|
|
include Rack::Test::Methods
|
|
|
|
def app()
|
|
described_class
|
|
end
|
|
|
|
describe 'Dashboard' do
|
|
|
|
context '/' do
|
|
before { get '/' }
|
|
|
|
it { expect(last_response.status).to eq(302) }
|
|
it { expect(last_response.location).to eq('http://example.org/dashboard/') }
|
|
end
|
|
|
|
context '/dashboard/' do
|
|
ENV['SITE_NAME'] = 'test pooler'
|
|
ENV['VMPOOLER_CONFIG'] = 'thing'
|
|
|
|
before do
|
|
get '/dashboard/'
|
|
end
|
|
|
|
it { expect(last_response).to be_ok }
|
|
it { expect(last_response.body).to match(/test pooler/) }
|
|
it { expect(last_response.body).not_to match(/<b>vmpooler<\/b>/) }
|
|
end
|
|
|
|
context 'unknown route' do
|
|
before { get '/doesnotexist' }
|
|
|
|
it { expect(last_response.status).to eq(404) }
|
|
it { expect(last_response.header['Content-Type']).to eq('application/json') }
|
|
it { expect(last_response.body).to eq(JSON.pretty_generate({ok: false})) }
|
|
end
|
|
|
|
describe '/dashboard/stats/vmpooler/pool' do
|
|
let(:config) { {
|
|
pools: [
|
|
{'name' => 'pool1', 'size' => 5},
|
|
{'name' => 'pool2', 'size' => 1}
|
|
],
|
|
graphite: {}
|
|
} }
|
|
|
|
before do
|
|
$config = config
|
|
app.settings.set :config, config
|
|
app.settings.set :redis, redis
|
|
app.settings.set :environment, :test
|
|
end
|
|
|
|
context 'without history param' do
|
|
it 'returns basic JSON' do
|
|
create_ready_vm('pool1', 'vm1')
|
|
create_ready_vm('pool1', 'vm2')
|
|
create_ready_vm('pool1', 'vm3')
|
|
create_ready_vm('pool2', 'vm4')
|
|
create_ready_vm('pool2', 'vm5')
|
|
|
|
get '/dashboard/stats/vmpooler/pool'
|
|
|
|
json_hash = {
|
|
pool1: {size: 5, ready: 3},
|
|
pool2: {size: 1, ready: 2}
|
|
}
|
|
|
|
expect(last_response).to be_ok
|
|
expect(last_response.body).to eq(JSON.pretty_generate(json_hash))
|
|
expect(last_response.header['Content-Type']).to eq('application/json')
|
|
end
|
|
end
|
|
|
|
context 'with history param' do
|
|
it 'returns JSON with zeroed history when redis does not have values' do
|
|
get '/dashboard/stats/vmpooler/pool', :history => true
|
|
|
|
json_hash = {
|
|
pool1: {size: 5, ready: 0, history: [0]},
|
|
pool2: {size: 1, ready: 0, history: [0]}
|
|
}
|
|
|
|
expect(last_response).to be_ok
|
|
expect(last_response.body).to eq(JSON.pretty_generate(json_hash))
|
|
expect(last_response.header['Content-Type']).to eq('application/json')
|
|
end
|
|
|
|
it 'returns JSON with history when redis has values' do
|
|
create_ready_vm('pool1', 'vm1')
|
|
create_ready_vm('pool1', 'vm2')
|
|
create_ready_vm('pool1', 'vm3')
|
|
create_ready_vm('pool2', 'vm4')
|
|
create_ready_vm('pool2', 'vm5')
|
|
|
|
get '/dashboard/stats/vmpooler/pool', :history => true
|
|
|
|
json_hash = {
|
|
pool1: {size: 5, ready: 3, history: [3]},
|
|
pool2: {size: 1, ready: 2, history: [2]}
|
|
}
|
|
|
|
expect(last_response).to be_ok
|
|
expect(last_response.body).to eq(JSON.pretty_generate(json_hash))
|
|
expect(last_response.header['Content-Type']).to eq('application/json')
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '/dashboard/stats/vmpooler/running' do
|
|
let(:config) { {
|
|
pools: [
|
|
{'name' => 'pool-1', 'size' => 5},
|
|
{'name' => 'pool-2', 'size' => 1},
|
|
{'name' => 'diffpool-1', 'size' => 3}
|
|
],
|
|
graphite: {}
|
|
} }
|
|
|
|
before do
|
|
$config = config
|
|
app.settings.set :config, config
|
|
app.settings.set :redis, redis
|
|
app.settings.set :environment, :test
|
|
end
|
|
|
|
context 'without history param' do
|
|
|
|
it 'returns basic JSON' do
|
|
get '/dashboard/stats/vmpooler/running'
|
|
|
|
json_hash = {pool: {running: 0}, diffpool: {running: 0}}
|
|
|
|
expect(last_response).to be_ok
|
|
expect(last_response.body).to eq(JSON.pretty_generate(json_hash))
|
|
expect(last_response.header['Content-Type']).to eq('application/json')
|
|
end
|
|
|
|
it 'adds major correctly' do
|
|
create_running_vm('pool-1', 'vm1')
|
|
create_running_vm('pool-1', 'vm2')
|
|
create_running_vm('pool-1', 'vm3')
|
|
|
|
create_running_vm('pool-2', 'vm4')
|
|
create_running_vm('pool-2', 'vm5')
|
|
create_running_vm('pool-2', 'vm6')
|
|
create_running_vm('pool-2', 'vm7')
|
|
create_running_vm('pool-2', 'vm8')
|
|
|
|
create_running_vm('diffpool-1', 'vm9')
|
|
create_running_vm('diffpool-1', 'vm10')
|
|
|
|
get '/dashboard/stats/vmpooler/running'
|
|
|
|
json_hash = {pool: {running: 8}, diffpool: {running: 2}}
|
|
|
|
expect(last_response).to be_ok
|
|
expect(last_response.body).to eq(JSON.pretty_generate(json_hash))
|
|
expect(last_response.header['Content-Type']).to eq('application/json')
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|