#! /usr/bin/env perl use strict; use warnings; # get rid of warnings use Class::C3; use MRO::Compat; use Tapper::Model 'model'; use Data::Dumper; use Test::Fixture::DBIC::Schema; use Tapper::Schema::TestTools; use Tapper::Producer::Temare; use Test::More 0.88; use Test::Deep; use Test::MockModule; use Devel::Backtrace; $SIG{INT} = sub { $SIG{INT}='ignore'; # not reentrant, don't handle signal twice my $backtrace = Devel::Backtrace->new(-start=>2, -format => '%I. %s'); print $backtrace; exit -1; }; BEGIN{ # -------------------------------------------------------------------------------- construct_fixture( schema => testrundb_schema, fixture => 't/fixtures/testrundb/testrun_with_scheduling_long.yml' ); # -------------------------------------------------------------------------------- } use aliased 'Tapper::MCP::Scheduler::Controller'; use aliased 'Tapper::MCP::Scheduler::Algorithm'; use aliased 'Tapper::MCP::Scheduler::Algorithm::WFQ'; model('TestrunDB')->resultset('QueueHost')->new({host_id => 2, queue_id => 2 })->insert; # addqueue bullock:KVM model('TestrunDB')->resultset('QueueHost')->new({host_id => 5, queue_id => 1 })->insert; # addqueue bascha:Xen # -------------------------------------------------- srand(17); # same random numbers every time my $algorithm = Algorithm->new_with_traits ( traits => [WFQ] ); my $scheduler = Controller->new (algorithm => $algorithm); # -------------------------------------------------- my $mock = new Test::MockModule('Tapper::Schema::TestrunDB::Result::TestrunScheduling'); $mock->mock('produce_preconditions',sub{return 0;}); sub toggle_host_free { my @hosts = model("TestrunDB")->resultset("Host")->all; my $host = $hosts[int rand(int @hosts)]; if ($host->free) { $host->free(0) if model("TestrunDB")->resultset("Host")->free_hosts->count > 1; } else { $host->free(1); } $host->update(); } my $next_job; my @jobqueue; my %jobs; # Job 1 eval{ for (my $i=0; $i<180; $i++) { $next_job = $scheduler->get_next_job(); if ($next_job) { print STDERR "."; push @jobqueue, $next_job->queue->name; $jobs{$next_job->queue->name}++; $scheduler->mark_job_as_running($next_job); } else { print STDERR ","; $jobs{none}++; } toggle_host_free(); } }; print $@ if $@; print STDERR "\n# ".Dumper \%jobs; print STDERR "# ".join(", ", @jobqueue); is($jobs{Kernel}, 24,'Kernel queue bandwith'); is($jobs{KVM}, 49,'KVM queue bandwith'); is($jobs{Xen}, 74, 'Xen queue bandwith'); is($jobs{none}, 33, 'Always jobs'); ok(1, 'Dummy'); done_testing();