// TestChainingTwoStep separately renews an attempt to insert an output // key, then finishes the work unit; it should still chain. func (s *Suite) TestChainingTwoStep(c *check.C) { var ( one, two coordinate.WorkSpec worker coordinate.Worker attempts []coordinate.Attempt units map[string]coordinate.WorkUnit unit coordinate.WorkUnit data map[string]interface{} priority float64 ok bool err error ) one, err = s.Namespace.SetWorkSpec(map[string]interface{}{ "name": "one", "then": "two", }) c.Assert(err, check.IsNil) two, err = s.Namespace.SetWorkSpec(map[string]interface{}{ "name": "two", }) c.Assert(err, check.IsNil) worker, err = s.Namespace.Worker("worker") c.Assert(err, check.IsNil) _, err = one.AddWorkUnit("a", map[string]interface{}{}, 0.0) c.Assert(err, check.IsNil) attempts, err = worker.RequestAttempts(coordinate.AttemptRequest{}) c.Assert(err, check.IsNil) c.Assert(attempts, check.HasLen, 1) err = attempts[0].Renew(time.Duration(900)*time.Second, map[string]interface{}{ "output": []interface{}{ []byte{1, 2, 3, 4}, cborrpc.PythonTuple{Items: []interface{}{ []byte{1, 2, 3, 4}, map[interface{}]interface{}{}, map[interface{}]interface{}{ "priority": 0, }, }}, }, }) c.Assert(err, check.IsNil) err = attempts[0].Finish(nil) units, err = two.WorkUnits(coordinate.WorkUnitQuery{}) c.Assert(err, check.IsNil) c.Check(units, HasKeys, []string{"\x01\x02\x03\x04"}) if unit, ok = units["\x01\x02\x03\x04"]; ok { data, err = unit.Data() c.Assert(err, check.IsNil) c.Check(data, check.DeepEquals, map[string]interface{}{}) priority, err = unit.Priority() c.Assert(err, check.IsNil) c.Check(priority, check.Equals, 0.0) } }
// TestWorkUnitPrioritySet tests two different ways of setting work unit // priority. func (s *Suite) TestWorkUnitPrioritySet(c *check.C) { var ( err error priority float64 unit coordinate.WorkUnit ) spec, worker := s.makeWorkSpecAndWorker(c) unit, err = spec.AddWorkUnit("a", map[string]interface{}{}, 0.0) c.Assert(err, check.IsNil) priority, err = unit.Priority() c.Assert(err, check.IsNil) c.Check(priority, check.Equals, 0.0) unit, err = spec.AddWorkUnit("b", map[string]interface{}{}, 0.0) c.Assert(err, check.IsNil) err = unit.SetPriority(10.0) c.Assert(err, check.IsNil) priority, err = unit.Priority() c.Assert(err, check.IsNil) c.Check(priority, check.Equals, 10.0) unit, err = spec.AddWorkUnit("c", map[string]interface{}{}, 0.0) c.Assert(err, check.IsNil) err = spec.SetWorkUnitPriorities(coordinate.WorkUnitQuery{ Names: []string{"c"}, }, 20.0) c.Assert(err, check.IsNil) priority, err = unit.Priority() c.Assert(err, check.IsNil) c.Check(priority, check.Equals, 20.0) unit, err = spec.AddWorkUnit("d", map[string]interface{}{}, 0.0) c.Assert(err, check.IsNil) err = spec.AdjustWorkUnitPriorities(coordinate.WorkUnitQuery{ Names: []string{"d"}, }, 20.0) priority, err = unit.Priority() c.Assert(err, check.IsNil) c.Check(priority, check.Equals, 20.0) c.Assert(err, check.IsNil) err = spec.AdjustWorkUnitPriorities(coordinate.WorkUnitQuery{ Names: []string{"d"}, }, 10.0) c.Assert(err, check.IsNil) priority, err = unit.Priority() c.Assert(err, check.IsNil) c.Check(priority, check.Equals, 30.0) unit, err = spec.WorkUnit("b") c.Assert(err, check.IsNil) priority, err = unit.Priority() c.Assert(err, check.IsNil) c.Check(priority, check.Equals, 10.0) checkWorkUnitOrder(c, worker, spec, "d", "c", "b", "a") }
// TestChainingMixed uses a combination of strings and tuples in its // "output" data. func (s *Suite) TestChainingMixed(c *check.C) { var ( one, two coordinate.WorkSpec worker coordinate.Worker attempts []coordinate.Attempt units map[string]coordinate.WorkUnit unit coordinate.WorkUnit data map[string]interface{} priority float64 ok bool err error ) one, err = s.Namespace.SetWorkSpec(map[string]interface{}{ "name": "one", "then": "two", }) c.Assert(err, check.IsNil) two, err = s.Namespace.SetWorkSpec(map[string]interface{}{ "name": "two", }) c.Assert(err, check.IsNil) worker, err = s.Namespace.Worker("worker") c.Assert(err, check.IsNil) _, err = one.AddWorkUnit("a", map[string]interface{}{}, 0.0) c.Assert(err, check.IsNil) attempts, err = worker.RequestAttempts(coordinate.AttemptRequest{}) c.Assert(err, check.IsNil) c.Assert(attempts, check.HasLen, 1) err = attempts[0].Finish(map[string]interface{}{ "output": []interface{}{ "key", cborrpc.PythonTuple{Items: []interface{}{ "key", map[string]interface{}{ "data": "x", }, map[string]interface{}{ "priority": 10.0, }, }}, }, }) c.Assert(err, check.IsNil) units, err = two.WorkUnits(coordinate.WorkUnitQuery{}) c.Assert(err, check.IsNil) c.Check(units, HasKeys, []string{"key"}) if unit, ok = units["key"]; ok { data, err = unit.Data() c.Assert(err, check.IsNil) c.Check(data, check.DeepEquals, map[string]interface{}{"data": "x"}) priority, err = unit.Priority() c.Assert(err, check.IsNil) c.Check(priority, check.Equals, 10.0) } }