func TestMachineGroupNoAliases(t *testing.T) { st, stop, err := testBoltStorage() if err != nil { t.Fatalf("want err = nil; got %v", err) } defer stop() // Add initial address. id := machine.ID("servA") address, err := addresses.NewCached(st) if err != nil { t.Fatalf("want err = nil; got %v", err) } if err := address.Add(id, testutil.TurnOnAddr()); err != nil { t.Fatalf("want err = nil; got %v", err) } if len(address.Registered()) != 1 { t.Errorf("want one registered machine; got %v", address.Registered()) } builder := testutil.NewBuilder(nil) g, err := New(testOptionsStorage(builder, st)) if err != nil { t.Fatalf("want err = nil; got %v", err) } defer g.Close() // Machine group should add alias for missing ID. alias, err := aliases.NewCached(st) if err != nil { t.Fatalf("want err = nil; got %v", err) } if len(alias.Registered()) != 1 { t.Errorf("want one registered machine; got %v", address.Registered()) } // Dynamic client should be started. if err := builder.WaitForBuild(time.Second); err != nil { t.Fatalf("want err = nil; got %v", err) } if builder.BuildsCount() != 1 { t.Errorf("want dynamic builds number = 1; got %d", builder.BuildsCount()) } }
func TestCreate(t *testing.T) { var ( builder = testutil.NewBuilder(nil) idA = machine.ID("servA") idB = machine.ID("servB") ) g, err := New(testOptions(builder)) if err != nil { t.Fatalf("want err = nil; got %v", err) } defer g.Close() const AddedServersCount = 2 req := &CreateRequest{ Addresses: map[machine.ID][]machine.Addr{ idA: {testutil.TurnOffAddr()}, idB: {testutil.TurnOnAddr()}, }, } res, err := g.Create(req) if err != nil { t.Fatalf("want err = nil; got %v", err) } if la := len(res.Aliases); la != AddedServersCount { t.Fatalf("want aliases count = %d; got: %d", AddedServersCount, la) } // Check generated aliases which must be unique and not empty. aliasA := res.Aliases[idA] if aliasA == "" { t.Errorf("want aliasA != ``; got ``") } aliasB := res.Aliases[idB] if aliasB == "" { t.Errorf("want aliasB != ``; got ``") } if aliasA == aliasB { t.Errorf("want aliasA != aliasB; got %s == %s", aliasA, aliasB) } for i := 0; i < AddedServersCount; i++ { if err := builder.WaitForBuild(time.Second); err != nil { t.Fatalf("want err = nil; got %v", err) } } // Already added, update statuses; don't change aliases. res, err = g.Create(req) if err != nil { t.Fatalf("want err = nil; got %v", err) } if aliasA != res.Aliases[idA] { t.Errorf("want aliasA = %s; got %s", aliasA, res.Aliases[idA]) } if aliasB != res.Aliases[idB] { t.Errorf("want aliasB = %s; got %s", aliasB, res.Aliases[idB]) } // Machines were pinged and they clients were build. statuses := map[machine.ID]machine.Status{ idA: machine.Status{State: machine.StateOffline}, idB: machine.Status{State: machine.StateOnline}, } if !reflect.DeepEqual(statuses, res.Statuses) { t.Fatalf("want statuses = %#v; got %#v", statuses, res.Statuses) } }