// TestSpecCreateDestroy performs basic work spec lifetime tests. func TestSpecCreateDestroy(t *testing.T) { var ( dict map[string]interface{} spec coordinate.WorkSpec name string names []string err error ) sts := SimpleTestSetup{ NamespaceName: "TestSpecCreateDestroy", } sts.SetUp(t) defer sts.TearDown(t) name = "spec" spec, err = sts.Namespace.WorkSpec(name) assert.Equal(t, coordinate.ErrNoSuchWorkSpec{Name: name}, err) names, err = sts.Namespace.WorkSpecNames() if assert.NoError(t, err) { assert.Len(t, names, 0) } dict = map[string]interface{}{ "name": name, "min_gb": 0.1, } spec, err = sts.Namespace.SetWorkSpec(dict) if assert.NoError(t, err) && assert.NotNil(t, spec) { assert.Equal(t, name, spec.Name()) } spec, err = sts.Namespace.WorkSpec(name) if assert.NoError(t, err) && assert.NotNil(t, spec) { assert.Equal(t, name, spec.Name()) } DataMatches(t, spec, dict) names, err = sts.Namespace.WorkSpecNames() if assert.NoError(t, err) { assert.Equal(t, []string{name}, names) } err = sts.Namespace.DestroyWorkSpec(name) assert.NoError(t, err) spec, err = sts.Namespace.WorkSpec(name) assert.Equal(t, coordinate.ErrNoSuchWorkSpec{Name: name}, err) names, err = sts.Namespace.WorkSpecNames() if assert.NoError(t, err) { assert.Len(t, names, 0) } err = sts.Namespace.DestroyWorkSpec(name) assert.Equal(t, coordinate.ErrNoSuchWorkSpec{Name: name}, err) }
func (api *restAPI) fillWorkUnitShort(namespace coordinate.Namespace, spec coordinate.WorkSpec, name string, short *restdata.WorkUnitShort) error { short.Name = name return buildURLs(api.Router, "namespace", namespace.Name(), "spec", spec.Name(), "unit", name, ).URL(&short.URL, "workUnit").Error }
func (api *restAPI) fillWorkUnit(namespace coordinate.Namespace, spec coordinate.WorkSpec, unit coordinate.WorkUnit, repr *restdata.WorkUnit) error { err := api.fillWorkUnitShort(namespace, spec, unit.Name(), &repr.WorkUnitShort) if err == nil { repr.Data, err = unit.Data() } if err == nil { var meta coordinate.WorkUnitMeta meta, err = unit.Meta() repr.Meta = &meta } if err == nil { repr.Status, err = unit.Status() } if err == nil { err = buildURLs(api.Router, "namespace", namespace.Name(), "spec", spec.Name(), "unit", unit.Name(), ). URL(&repr.WorkSpecURL, "workSpec"). URL(&repr.AttemptsURL, "workUnitAttempts"). Error } if err == nil { var attempt coordinate.Attempt attempt, err = unit.ActiveAttempt() if err == nil && attempt != nil { // This is cheating, a little, but it's probably // the easiest way to reuse this code var short restdata.AttemptShort err = api.fillAttemptShort(namespace, attempt, &short) if err == nil { repr.ActiveAttemptURL = short.URL } } } return err }
// TestTwoWorkSpecsBasic ensures that two work specs can be created // and have independent lifetimes. func TestTwoWorkSpecsBasic(t *testing.T) { var ( err error dict1, dict2 map[string]interface{} name1, name2 string names []string spec coordinate.WorkSpec ) namespace, err := Coordinate.Namespace("TestTwoWorkSpecsBasic") if !assert.NoError(t, err) { return } defer namespace.Destroy() name1 = "spec1" name2 = "spec2" dict1 = map[string]interface{}{"name": name1, "min_gb": 1} dict2 = map[string]interface{}{"name": name2, "min_gb": 2} names, err = namespace.WorkSpecNames() if assert.NoError(t, err) { assert.Len(t, names, 0) } spec, err = namespace.SetWorkSpec(dict1) assert.NoError(t, err) names, err = namespace.WorkSpecNames() if assert.NoError(t, err) { assert.Equal(t, []string{name1}, names) } spec, err = namespace.SetWorkSpec(dict2) assert.NoError(t, err) names, err = namespace.WorkSpecNames() if assert.NoError(t, err) { assert.Len(t, names, 2) assert.Contains(t, names, name1) assert.Contains(t, names, name2) } spec, err = namespace.WorkSpec(name1) if assert.NoError(t, err) && assert.NotNil(t, spec) { assert.Equal(t, name1, spec.Name()) } spec, err = namespace.WorkSpec(name2) if assert.NoError(t, err) && assert.NotNil(t, spec) { assert.Equal(t, name2, spec.Name()) } err = namespace.DestroyWorkSpec(name1) assert.NoError(t, err) names, err = namespace.WorkSpecNames() if assert.NoError(t, err) { assert.Len(t, names, 1) assert.Contains(t, names, name2) } spec, err = namespace.WorkSpec(name1) assert.Equal(t, coordinate.ErrNoSuchWorkSpec{Name: name1}, err) spec, err = namespace.WorkSpec(name2) if assert.NoError(t, err) && assert.NotNil(t, spec) { assert.Equal(t, name2, spec.Name()) } err = namespace.DestroyWorkSpec(name2) assert.NoError(t, err) names, err = namespace.WorkSpecNames() if assert.NoError(t, err) { assert.Len(t, names, 0) } spec, err = namespace.WorkSpec(name1) assert.Equal(t, coordinate.ErrNoSuchWorkSpec{Name: name1}, err) spec, err = namespace.WorkSpec(name2) assert.Equal(t, coordinate.ErrNoSuchWorkSpec{Name: name2}, err) }