osc-reservations 1.0.3

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.
@@ -0,0 +1,47 @@
1
+ ---
2
+ - :name: 4691489.oak-batch.osc.edu
3
+ :attribs:
4
+ :Job_Name: TestJob
5
+ :Job_Owner: jnicklas@oakley01.osc.edu
6
+ :resources_used:
7
+ :cput: '00:00:00'
8
+ :energy_used: '0'
9
+ :mem: 2208kb
10
+ :vmem: 211332kb
11
+ :walltime: '00:00:14'
12
+ :job_state: R
13
+ :queue: serial
14
+ :server: oak-batch.osc.edu:15001
15
+ :Checkpoint: u
16
+ :ctime: '1443626884'
17
+ :Error_Path: oakley01.osc.edu:/nfs/17/jnicklas/ttt/TestJob.e4845720
18
+ :exec_host: n0675/0-11
19
+ :exec_port: '15003'
20
+ :Hold_Types: n
21
+ :Join_Path: n
22
+ :Keep_Files: n
23
+ :Mail_Points: a
24
+ :mtime: '1443626959'
25
+ :Output_Path: oakley01.osc.edu:/nfs/17/jnicklas/ttt/TestJob.o4845720
26
+ :Priority: '0'
27
+ :qtime: '1443626884'
28
+ :Rerunable: 'True'
29
+ :Resource_List:
30
+ :gattr: fs17
31
+ :nodect: '1'
32
+ :nodes: 1:ppn=12
33
+ :walltime: '03:00:00'
34
+ :session_id: '22136'
35
+ :Variable_List: PBS_O_QUEUE=batch,PBS_O_HOME=/nfs/17/jnicklas,PBS_O_LOGNAME=jnicklas,PBS_O_PATH=/nfs/gpfs/PZS0645/local-oakley/tree/1.7.0/bin:/nfs/gpfs/PZS0645/local-oakley/git/2.3.6/bin:/nfs/gpfs/PZS0645/local-oakley/vim/7.4/bin:/nfs/17/jnicklas/bin:/usr/lib64/qt-3.3/bin:/usr/local/mvapich2/intel/15/2.1/bin:/usr/local/intel/vtune_amplifier_xe_2015.3.0.403110/bin64:/usr/local/intel/inspector_xe_2015.1.2.379161/bin64:/usr/local/intel/composer_xe_2015.3.187/bin/intel64:/usr/local/moab/8.1.1.2-2015080516-eb28ad0-el6/bin:/usr/local/torque/5.1.1-1_fba25d92/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin,PBS_O_MAIL=/var/spool/mail/jnicklas,PBS_O_SHELL=/bin/bash,PBS_O_LANG=en_US.UTF-8,PBS_O_SUBMIT_FILTER=/usr/local/sbin/torque_submitfilter,PBS_O_WORKDIR=/nfs/17/jnicklas/ttt,PBS_O_HOST=oakley01.osc.edu,PBS_O_SERVER=oak-batch.osc.edu
36
+ :euser: jnicklas
37
+ :egroup: appl
38
+ :queue_type: E
39
+ :etime: '1443626884'
40
+ :submit_args: -l nodes=1:ppn=12 -l walltime=03:00:00 -N TestJob
41
+ :start_time: '1443626959'
42
+ :Walltime:
43
+ :Remaining: '10756'
44
+ :start_count: '1'
45
+ :fault_tolerant: 'False'
46
+ :job_radix: '0'
47
+ :submit_host: oakley01.osc.edu
@@ -0,0 +1,14 @@
1
+ ---
2
+ - :name: n0609
3
+ :attribs:
4
+ :state: job-exclusive
5
+ :power_state: Running
6
+ :np: '12'
7
+ :properties: cbb15,partdual,udapl
8
+ :ntype: cluster
9
+ :jobs: 0-11/4691489.oak-batch.osc.edu
10
+ :status: 'rectime=1443628199,macaddr=78:e7:d1:24:0c:48,cpuclock=Fixed,varattr=,jobs=4691489.oak-batch.osc.edu(cput=84158,energy_used=0,mem=7605064kb,vmem=17512224kb,walltime=7316,session_id=23155),state=free,size=851670964kb:851799524kb,netload=517894350841,gres=,loadave=12.00,ncpus=12,physmem=49547224kb,availmem=87458364kb,totmem=97547220kb,idletime=1275445,nusers=1,nsessions=1,sessions=23155,uname=Linux
11
+ n0609.ten.osc.edu 2.6.32-573.3.1.el6.x86_64 #1 SMP Mon Aug 10 09:44:54 EDT 2015
12
+ x86_64,opsys=linux'
13
+ :mom_service_port: '15002'
14
+ :mom_manager_port: '15003'
@@ -0,0 +1,15 @@
1
+ ---
2
+ - :name: n0611
3
+ :attribs:
4
+ :state: job-exclusive
5
+ :power_state: Running
6
+ :np: '12'
7
+ :properties: cbb15,partdual
8
+ :ntype: cluster
9
+ :jobs: 0-5/4691490.oak-batch.osc.edu,6-11/4691491.oak-batch.osc.edu
10
+ :status: 'rectime=1443628199,macaddr=78:e7:d1:24:0c:48,cpuclock=Fixed,varattr=,jobs=4691490.oak-batch.osc.edu(cput=84158,energy_used=0,mem=7605064kb,vmem=17512224kb,walltime=7316,session_id=23155)
11
+ 4691491.oak-batch.osc.edu(cput=84158,energy_used=0,mem=7605064kb,vmem=17512224kb,walltime=7316,session_id=23155),state=free,size=851670964kb:851799524kb,netload=517894350841,gres=,loadave=12.00,ncpus=12,physmem=49547224kb,availmem=87458364kb,totmem=97547220kb,idletime=1275445,nusers=1,nsessions=1,sessions=23155,uname=Linux
12
+ n0611.ten.osc.edu 2.6.32-573.3.1.el6.x86_64 #1 SMP Mon Aug 10 09:44:54 EDT 2015
13
+ x86_64,opsys=linux'
14
+ :mom_service_port: '15002'
15
+ :mom_manager_port: '15003'
@@ -0,0 +1,13 @@
1
+ ---
2
+ - :name: n0612
3
+ :attribs:
4
+ :state: job-exclusive
5
+ :power_state: Running
6
+ :np: '12'
7
+ :properties: cbb15,partdual,udapl
8
+ :ntype: cluster
9
+ :status: 'rectime=1443628517,macaddr=78:e7:d1:22:e9:28,cpuclock=Fixed,varattr=,jobs=,state=free,size=850672204kb:851799524kb,netload=809762478607,gres=,loadave=0.00,ncpus=12,physmem=49547224kb,availmem=96383676kb,totmem=97547220kb,idletime=485292,nusers=0,nsessions=0,uname=Linux
10
+ n0612.ten.osc.edu 2.6.32-573.3.1.el6.x86_64 #1 SMP Mon Aug 10 09:44:54 EDT 2015
11
+ x86_64,opsys=linux'
12
+ :mom_service_port: '15002'
13
+ :mom_manager_port: '15003'
@@ -0,0 +1,13 @@
1
+ ---
2
+ - :name: n0613
3
+ :attribs:
4
+ :state: free
5
+ :power_state: Running
6
+ :np: '12'
7
+ :properties: cbb15,partdual,udapl
8
+ :ntype: cluster
9
+ :status: 'rectime=1443628517,macaddr=78:e7:d1:22:e9:28,cpuclock=Fixed,varattr=,jobs=,state=free,size=850672204kb:851799524kb,netload=809762478607,gres=,loadave=0.00,ncpus=12,physmem=49547224kb,availmem=96383676kb,totmem=97547220kb,idletime=485292,nusers=0,nsessions=0,uname=Linux
10
+ n0613.ten.osc.edu 2.6.32-573.3.1.el6.x86_64 #1 SMP Mon Aug 10 09:44:54 EDT 2015
11
+ x86_64,opsys=linux'
12
+ :mom_service_port: '15002'
13
+ :mom_manager_port: '15003'
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0"?>
2
+ <Data>
3
+ <rsv AUser="judithg" AllocNodeCount="4" AllocNodeList="n0613,n0612,n0611,n0609" AllocProcCount="48" AllocTaskCount="4" Name="wiag.1809" Partition="oakley01" ReqNodeList="n0613:1,n0612:1,n0611:1,n0609:1" ReqTaskCount="4" Resources="PROCS=[ALL]" StatCAPS="12891160.62" StatCIPS="369507295.86" SubType="Other" Type="User" endtime="1633854480" flags="DEDICATEDRESOURCE,IGNJOBRSV,ISACTIVE,REQFULL" starttime="1433854480">
4
+ <ACL aff="neutral" cmp="%=" name="wiag.1809" type="RSV"/>
5
+ <ACL aff="positive" cmp="%=" name="bmcmichael" type="USER"/>
6
+ <ACL aff="positive" cmp="%=" name="jnicklas" type="USER"/>
7
+ <ACL aff="positive" cmp="%=" name="awe0011" type="USER"/>
8
+ <ACL aff="positive" cmp="%=" name="ndem0009" type="USER"/>
9
+ <ACL aff="positive" cmp="%=" name="efranz" type="USER"/>
10
+ <ACL aff="positive" cmp="%=" name="ndem0010" type="USER"/>
11
+ <ACL aff="positive" cmp="%=" name="bgohar" type="USER"/>
12
+ <CL aff="neutral" cmp="%=" name="wiag.1809" type="RSV"/>
13
+ <CL aff="unavailable" cmp="%=" name="judithg" type="USER"/>
14
+ <History>
15
+ <event state="PROCS=48" time="1433854480"/>
16
+ </History>
17
+ </rsv>
18
+ </Data>
@@ -0,0 +1,97 @@
1
+ <?xml version="1.0"?>
2
+ <Data>
3
+ <!-- Oakley example -->
4
+ <rsv AllocNodeCount="1" AllocNodeList="n0609" AllocProcCount="12" AllocTaskCount="1" Name="4691489" Partition="oakley01" Resources="PROCS=12;MEM=49152;gres=ippn:12" RsvGroup="4691489" SubType="JobReservation" Type="Job" endtime="1441820663" flags="ISACTIVE" starttime="1441809863">
5
+ <ACL aff="neutral" cmp="%=" name="4691489" type="JOB"/>
6
+ <CL aff="positive" cmp="%=" name="4691489" type="JOB"/>
7
+ <CL aff="positive" cmp="%=" name="jnicklas" type="USER"/>
8
+ <CL aff="positive" cmp="%=" name="appl" type="GROUP"/>
9
+ <CL aff="positive" cmp="%=" name="serial" type="CLASS"/>
10
+ <CL aff="positive" cmp="==" type="DURATION" val="10800"/>
11
+ <CL aff="positive" cmp="==" type="PROC" val="12"/>
12
+ <CL aff="positive" cmp="==" type="MEMORY" val="49152"/>
13
+ <CL aff="positive" cmp="==" type="PS" val="129600"/>
14
+ <CL aff="positive" cmp="%=" name="Moab" type="CLUSTER"/>
15
+ <CL aff="positive" cmp="%=" name="checkpoint" type="JATTR"/>
16
+ <CL aff="positive" cmp="%=" name="fs17" type="JATTR"/>
17
+ <CL aff="positive" cmp="&lt;=" type="JPRIORITY"/>
18
+ </rsv>
19
+ <rsv AllocNodeCount="1" AllocNodeList="n0611" AllocProcCount="1" AllocTaskCount="1" Name="4691490" Partition="oakley01" Resources="PROCS=1;MEM=4096;gres=ippn:1" RsvGroup="4691490" SubType="JobReservation" Type="Job" endtime="1441820663" flags="ISACTIVE" starttime="1441809863">
20
+ <ACL aff="neutral" cmp="%=" name="4691490" type="JOB"/>
21
+ <CL aff="positive" cmp="%=" name="4691490" type="JOB"/>
22
+ <CL aff="positive" cmp="%=" name="jnicklas" type="USER"/>
23
+ <CL aff="positive" cmp="%=" name="appl" type="GROUP"/>
24
+ <CL aff="positive" cmp="%=" name="serial" type="CLASS"/>
25
+ <CL aff="positive" cmp="==" type="DURATION" val="10800"/>
26
+ <CL aff="positive" cmp="==" type="PROC" val="1"/>
27
+ <CL aff="positive" cmp="==" type="MEMORY" val="4096"/>
28
+ <CL aff="positive" cmp="==" type="PS" val="10800"/>
29
+ <CL aff="positive" cmp="%=" name="Moab" type="CLUSTER"/>
30
+ <CL aff="positive" cmp="%=" name="checkpoint" type="JATTR"/>
31
+ <CL aff="positive" cmp="%=" name="fs17" type="JATTR"/>
32
+ <CL aff="positive" cmp="&lt;=" type="JPRIORITY"/>
33
+ </rsv>
34
+ <rsv AllocNodeCount="1" AllocNodeList="n0611" AllocProcCount="1" AllocTaskCount="1" Name="4691491" Partition="oakley01" Resources="PROCS=1;MEM=4096;gres=ippn:1" RsvGroup="4691491" SubType="JobReservation" Type="Job" endtime="1441820663" flags="ISACTIVE" starttime="1441809863">
35
+ <ACL aff="neutral" cmp="%=" name="4691491" type="JOB"/>
36
+ <CL aff="positive" cmp="%=" name="4691491" type="JOB"/>
37
+ <CL aff="positive" cmp="%=" name="jnicklas" type="USER"/>
38
+ <CL aff="positive" cmp="%=" name="appl" type="GROUP"/>
39
+ <CL aff="positive" cmp="%=" name="serial" type="CLASS"/>
40
+ <CL aff="positive" cmp="==" type="DURATION" val="10800"/>
41
+ <CL aff="positive" cmp="==" type="PROC" val="1"/>
42
+ <CL aff="positive" cmp="==" type="MEMORY" val="4096"/>
43
+ <CL aff="positive" cmp="==" type="PS" val="10800"/>
44
+ <CL aff="positive" cmp="%=" name="Moab" type="CLUSTER"/>
45
+ <CL aff="positive" cmp="%=" name="checkpoint" type="JATTR"/>
46
+ <CL aff="positive" cmp="%=" name="fs17" type="JATTR"/>
47
+ <CL aff="positive" cmp="&lt;=" type="JPRIORITY"/>
48
+ </rsv>
49
+ <rsv AllocNodeCount="1" AllocNodeList="n0611" AllocProcCount="1" AllocTaskCount="1" Name="4691492" Partition="oakley01" Resources="PROCS=1;MEM=4096;gres=ippn:1" RsvGroup="4691492" SubType="JobReservation" Type="Job" endtime="1441820663" flags="ISACTIVE" starttime="1441809863">
50
+ <ACL aff="neutral" cmp="%=" name="4691492" type="JOB"/>
51
+ <CL aff="positive" cmp="%=" name="4691492" type="JOB"/>
52
+ <CL aff="positive" cmp="%=" name="jnicklas" type="USER"/>
53
+ <CL aff="positive" cmp="%=" name="appl" type="GROUP"/>
54
+ <CL aff="positive" cmp="%=" name="serial" type="CLASS"/>
55
+ <CL aff="positive" cmp="==" type="DURATION" val="10800"/>
56
+ <CL aff="positive" cmp="==" type="PROC" val="1"/>
57
+ <CL aff="positive" cmp="==" type="MEMORY" val="4096"/>
58
+ <CL aff="positive" cmp="==" type="PS" val="10800"/>
59
+ <CL aff="positive" cmp="%=" name="Moab" type="CLUSTER"/>
60
+ <CL aff="positive" cmp="%=" name="checkpoint" type="JATTR"/>
61
+ <CL aff="positive" cmp="%=" name="fs17" type="JATTR"/>
62
+ <CL aff="positive" cmp="&lt;=" type="JPRIORITY"/>
63
+ </rsv>
64
+ <!-- currently started reservation -->
65
+ <rsv AUser="judithg" AllocNodeCount="4" AllocNodeList="n0613,n0612,n0611,n0609" AllocProcCount="48" AllocTaskCount="4" Name="wiag.1809" Partition="oakley01" ReqNodeList="n0613:1,n0612:1,n0611:1,n0609:1" ReqTaskCount="4" Resources="PROCS=[ALL]" StatCAPS="12884060.22" StatCIPS="368963259.30" SubType="Other" Type="User" endtime="1633854480" flags="DEDICATEDRESOURCE,IGNJOBRSV,ISACTIVE,REQFULL" starttime="1433854480">
66
+ <ACL aff="neutral" cmp="%=" name="wiag.1809" type="RSV"/>
67
+ <ACL aff="positive" cmp="%=" name="bmcmichael" type="USER"/>
68
+ <ACL aff="positive" cmp="%=" name="jnicklas" type="USER"/>
69
+ <ACL aff="positive" cmp="%=" name="awe0011" type="USER"/>
70
+ <ACL aff="positive" cmp="%=" name="ndem0009" type="USER"/>
71
+ <ACL aff="positive" cmp="%=" name="efranz" type="USER"/>
72
+ <ACL aff="positive" cmp="%=" name="ndem0010" type="USER"/>
73
+ <ACL aff="positive" cmp="%=" name="bgohar" type="USER"/>
74
+ <CL aff="neutral" cmp="%=" name="wiag.1809" type="RSV"/>
75
+ <CL aff="unavailable" cmp="%=" name="judithg" type="USER"/>
76
+ <History>
77
+ <event state="PROCS=48" time="1433854480"/>
78
+ </History>
79
+ </rsv>
80
+ <!-- future reservation -->
81
+ <rsv AUser="judithg" AllocNodeCount="4" AllocNodeList="n0613,n0612,n0611,n0609" AllocProcCount="48" AllocTaskCount="4" Name="wiag.1810" Partition="oakley01" ReqNodeList="n0613:1,n0612:1,n0611:1,n0609:1" ReqTaskCount="4" Resources="PROCS=[ALL]" StatCAPS="12884060.22" StatCIPS="368963259.30" SubType="Other" Type="User" endtime="1633854480" flags="DEDICATEDRESOURCE,IGNJOBRSV,ISACTIVE,REQFULL" starttime="99991433854480">
82
+ <ACL aff="neutral" cmp="%=" name="wiag.1809" type="RSV"/>
83
+ <ACL aff="positive" cmp="%=" name="bmcmichael" type="USER"/>
84
+ <ACL aff="positive" cmp="%=" name="jnicklas" type="USER"/>
85
+ <ACL aff="positive" cmp="%=" name="awe0011" type="USER"/>
86
+ <ACL aff="positive" cmp="%=" name="ndem0009" type="USER"/>
87
+ <ACL aff="positive" cmp="%=" name="efranz" type="USER"/>
88
+ <ACL aff="positive" cmp="%=" name="ndem0010" type="USER"/>
89
+ <ACL aff="positive" cmp="%=" name="bgohar" type="USER"/>
90
+ <CL aff="neutral" cmp="%=" name="wiag.1809" type="RSV"/>
91
+ <CL aff="unavailable" cmp="%=" name="judithg" type="USER"/>
92
+ <History>
93
+ <event state="PROCS=48" time="1433854480"/>
94
+ </History>
95
+ </rsv>
96
+ <!-- /Oakley example -->
97
+ </Data>
@@ -0,0 +1,14 @@
1
+ require 'minitest/autorun'
2
+ require 'osc/reservations'
3
+
4
+ class TestAdapter < Minitest::Test
5
+ def test_adapter
6
+ adapter = OSC::Reservations::Adapter.new
7
+ assert_respond_to adapter, :query_reservation
8
+ assert_raises(NotImplementedError) {adapter.query_reservation 'BATCH', 123}
9
+ assert_respond_to adapter, :query_reservations
10
+ assert_raises(NotImplementedError) {adapter.query_reservations 'BATCH'}
11
+ assert_respond_to adapter, :submit_reservation
12
+ assert_raises(NotImplementedError) {adapter.submit_reservation 'BATCH', 'RSV'}
13
+ end
14
+ end
@@ -0,0 +1,23 @@
1
+ require 'minitest/autorun'
2
+ require 'osc/reservations'
3
+
4
+ class TestBatch < Minitest::Test
5
+ def setup
6
+ @batch = OSC::Reservations::Batch.new 'a.b.c', a: 'A', b: 2, 'q?' => true
7
+ end
8
+
9
+ def test_server
10
+ assert_respond_to @batch, :server
11
+ assert_equal 'a.b.c', @batch.server
12
+ end
13
+
14
+ def test_context
15
+ assert_respond_to @batch, :a
16
+ assert_equal 'A', @batch.a
17
+ assert_respond_to @batch, :b
18
+ assert_equal 2, @batch.b
19
+ refute_respond_to @batch, :c
20
+ assert_respond_to @batch, :'q?'
21
+ assert @batch.q?
22
+ end
23
+ end
data/test/test_node.rb ADDED
@@ -0,0 +1,21 @@
1
+ require 'minitest/autorun'
2
+ require 'osc/reservations'
3
+
4
+ class TestNode < Minitest::Test
5
+ def test_node
6
+ node = OSC::Reservations::Node.new({})
7
+ assert_respond_to node, :id
8
+ assert_respond_to node, :np
9
+ assert_respond_to node, :props
10
+ assert_respond_to node, :jobs
11
+ assert_respond_to node, :users
12
+ end
13
+
14
+ def test_free?
15
+ node = OSC::Reservations::Node.new({jobs: ["123.job"]})
16
+ refute node.free?
17
+
18
+ node = OSC::Reservations::Node.new({jobs: []})
19
+ assert node.free?
20
+ end
21
+ end
@@ -0,0 +1,62 @@
1
+ require 'minitest/autorun'
2
+ require 'osc/reservations'
3
+
4
+ BATCH_CONFIG = {
5
+ 'batch1' => {
6
+ 'adapter' => {
7
+ 'type' => 'FakeAdapter'
8
+ },
9
+ 'batch' => {
10
+ 'server' => 'batch1.domain.com',
11
+ 'extra1' => 'EXTRA1'
12
+ }
13
+ }
14
+ }
15
+
16
+ class FakeAdapter
17
+ end
18
+
19
+ class TestQuery < Minitest::Test
20
+ def test_query
21
+ query = OSC::Reservations::Query.new 'ADAPTER', 'BATCH'
22
+ assert_respond_to query, :reservation
23
+ assert_respond_to query, :reservations
24
+ end
25
+
26
+ def test_reservation
27
+ adapter = Minitest::Mock.new
28
+ adapter.expect(:query_reservation, 'RSV', ['BATCH', 123])
29
+ query = OSC::Reservations::Query.new adapter, 'BATCH'
30
+ rsv = query.reservation 123
31
+ assert_equal 'RSV', rsv
32
+ adapter.verify
33
+ end
34
+
35
+ def test_reservations
36
+ adapter = Minitest::Mock.new
37
+ adapter.expect(:query_reservations, ['RSV1', 'RSV2'], ['BATCH'])
38
+ query = OSC::Reservations::Query.new adapter, 'BATCH'
39
+ rsv_list = query.reservations
40
+ assert_equal ['RSV1', 'RSV2'], rsv_list
41
+ adapter.verify
42
+ end
43
+
44
+ def test_predefined_batch_servers
45
+ OSC::Reservations.stub :batch_config, BATCH_CONFIG do
46
+ assert_respond_to OSC::Reservations::Query, :batch1
47
+ refute_respond_to OSC::Reservations::Query, :batch_unknown
48
+
49
+ mock_adapter = Minitest::Mock.new
50
+ mock_adapter.expect(:call, nil)
51
+ mock_batch = Minitest::Mock.new
52
+ mock_batch.expect(:call, nil, ['batch1.domain.com', {'extra1' => 'EXTRA1'}])
53
+ FakeAdapter.stub :new, mock_adapter do
54
+ OSC::Reservations::Batch.stub :new, mock_batch do
55
+ assert_instance_of OSC::Reservations::Query, OSC::Reservations::Query.batch1
56
+ end
57
+ end
58
+ mock_batch.verify
59
+ mock_adapter.verify
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,33 @@
1
+ require 'minitest/autorun'
2
+ require 'osc/reservations'
3
+
4
+ class TestReservation < Minitest::Test
5
+ def test_reservation
6
+ rsv = OSC::Reservations::Reservation.new({})
7
+ assert_respond_to rsv, :id
8
+ assert_respond_to rsv, :starttime
9
+ assert_respond_to rsv, :endtime
10
+ assert_respond_to rsv, :nodes
11
+ assert_respond_to rsv, :auser
12
+ assert_respond_to rsv, :users
13
+ end
14
+
15
+ def test_free_nodes
16
+ node1 = Minitest::Mock.new
17
+ node1.expect(:'free?', false)
18
+ node2 = Minitest::Mock.new
19
+ node2.expect(:'free?', true)
20
+ rsv = OSC::Reservations::Reservation.new({nodes: [node1, node2]})
21
+ assert_equal [node2], rsv.free_nodes
22
+ node1.verify
23
+ node2.verify
24
+ end
25
+
26
+ def test_started?
27
+ rsv = OSC::Reservations::Reservation.new(starttime: Time.now - 60)
28
+ assert rsv.started?
29
+
30
+ rsv = OSC::Reservations::Reservation.new(starttime: Time.now + 60)
31
+ refute rsv.started?
32
+ end
33
+ end
@@ -0,0 +1,28 @@
1
+ require 'minitest/autorun'
2
+ require 'osc/reservations'
3
+
4
+ class TestReservations < Minitest::Test
5
+ def test_reservations
6
+ assert_respond_to OSC::Reservations, :batch_config_path
7
+ assert_respond_to OSC::Reservations, :batch_config_path=
8
+ assert_respond_to OSC::Reservations, :batch_config
9
+ end
10
+
11
+ def test_batch_config_path
12
+ assert File.exist?(OSC::Reservations.batch_config_path)
13
+ OSC::Reservations.batch_config_path = "/path/to/config.yml"
14
+ assert_equal "/path/to/config.yml", OSC::Reservations.batch_config_path
15
+ end
16
+
17
+ def test_batch_config
18
+ hash = {
19
+ 'batch1' => {
20
+ 'adapter' => 'FakeAdapter',
21
+ 'server' => 'batch1.domain.com',
22
+ 'extra1' => 'EXTRA1'
23
+ }
24
+ }
25
+ OSC::Reservations.batch_config_path = "test/files/batch.yml"
26
+ assert_equal hash, OSC::Reservations.batch_config
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: osc-reservations
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Jeremy Nicklas
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-06-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pbs
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.7'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ description: This library queries active OSC reservations for the running user.
70
+ email:
71
+ - jnicklas@osc.edu
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - Gemfile
78
+ - LICENSE.txt
79
+ - README.md
80
+ - Rakefile
81
+ - config/batch.yml
82
+ - config/websvcs08.osc.edu.yml
83
+ - lib/osc/reservations.rb
84
+ - lib/osc/reservations/adapter.rb
85
+ - lib/osc/reservations/adapters/osc_moab.rb
86
+ - lib/osc/reservations/batch.rb
87
+ - lib/osc/reservations/node.rb
88
+ - lib/osc/reservations/query.rb
89
+ - lib/osc/reservations/reservation.rb
90
+ - lib/osc/reservations/version.rb
91
+ - osc-reservations.gemspec
92
+ - test/adapters/test_osc_moab.rb
93
+ - test/files/batch.yml
94
+ - test/files/osc_oakley_job_4691489.oak-batch.osc.edu.yml
95
+ - test/files/osc_oakley_job_4691490.oak-batch.osc.edu.yml
96
+ - test/files/osc_oakley_job_4691491.oak-batch.osc.edu.yml
97
+ - test/files/osc_oakley_node_n0609.yml
98
+ - test/files/osc_oakley_node_n0611.yml
99
+ - test/files/osc_oakley_node_n0612.yml
100
+ - test/files/osc_oakley_node_n0613.yml
101
+ - test/files/osc_rsv.xml
102
+ - test/files/osc_rsvs.xml
103
+ - test/test_adapter.rb
104
+ - test/test_batch.rb
105
+ - test/test_node.rb
106
+ - test/test_query.rb
107
+ - test/test_reservation.rb
108
+ - test/test_reservations.rb
109
+ homepage: https://github.com/OSC/osc-reservations
110
+ licenses:
111
+ - MIT
112
+ metadata: {}
113
+ post_install_message:
114
+ rdoc_options: []
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ requirements: []
128
+ rubyforge_project:
129
+ rubygems_version: 2.4.8
130
+ signing_key:
131
+ specification_version: 4
132
+ summary: Query current OSC reservations for running user
133
+ test_files:
134
+ - test/adapters/test_osc_moab.rb
135
+ - test/files/batch.yml
136
+ - test/files/osc_oakley_job_4691489.oak-batch.osc.edu.yml
137
+ - test/files/osc_oakley_job_4691490.oak-batch.osc.edu.yml
138
+ - test/files/osc_oakley_job_4691491.oak-batch.osc.edu.yml
139
+ - test/files/osc_oakley_node_n0609.yml
140
+ - test/files/osc_oakley_node_n0611.yml
141
+ - test/files/osc_oakley_node_n0612.yml
142
+ - test/files/osc_oakley_node_n0613.yml
143
+ - test/files/osc_rsv.xml
144
+ - test/files/osc_rsvs.xml
145
+ - test/test_adapter.rb
146
+ - test/test_batch.rb
147
+ - test/test_node.rb
148
+ - test/test_query.rb
149
+ - test/test_reservation.rb
150
+ - test/test_reservations.rb