func testReadContainerTransact(t *testing.T, view db.Database) { minion := view.InsertMinion() minion.Role = db.Worker minion.Self = true view.Commit(minion) for _, id := range []string{"a", "b"} { container := view.InsertContainer() container.DockerID = id view.Commit(container) } container := view.InsertContainer() container.DockerID = "c" container.IP = "junk" view.Commit(container) dir := directory(map[string]map[string]string{ "a": {"IP": "1.0.0.0", "Labels": `["e"]`}, "b": {"IP": "2.0.0.0", "Labels": `["e", "f"]`}, }) readContainerTransact(view, dir) ipMap := map[string]string{} labelMap := map[string][]string{} for _, c := range view.SelectFromContainer(nil) { ipMap[c.DockerID] = c.IP labelMap[c.DockerID] = c.Labels } expIPMap := map[string]string{ "a": "1.0.0.0", "b": "2.0.0.0", "c": "", } if !eq(ipMap, expIPMap) { t.Error(spew.Sprintf("Found %s, Expected: %s", ipMap, expIPMap)) } expLabelMap := map[string][]string{ "a": {"e"}, "b": {"e", "f"}, "c": nil, } if !eq(labelMap, expLabelMap) { t.Error(spew.Sprintf("Found %s, Expected: %s", ipMap, expIPMap)) } }
func testUpdateWorkerDBC(t *testing.T, view db.Database) { minion := view.InsertMinion() minion.Role = db.Worker minion.Self = true view.Commit(minion) for id := 1; id < 3; id++ { container := view.InsertContainer() container.StitchID = id container.IP = fmt.Sprintf("10.1.0.%d", id-1) container.Minion = "1.2.3.4" container.Command = []string{"echo", "hi"} container.Env = map[string]string{"GOPATH": "~"} view.Commit(container) } cs := storeContainerSlice{ { StitchID: 1, Command: []string{"echo", "hi"}, Labels: []string{"red", "blue"}, Env: map[string]string{"GOPATH": "~"}, Minion: "1.2.3.4", }, { StitchID: 2, Command: []string{"echo", "hi"}, Labels: []string{"blue", "green"}, Env: map[string]string{"GOPATH": "~"}, Minion: "1.2.3.4", }, { StitchID: 3, Command: []string{"echo", "bye"}, Labels: []string{"blue", "green"}, Env: map[string]string{"GOPATH": "~"}, Minion: "1.2.3.5", }, } store := newTestMock() jsonCS, _ := json.Marshal(cs) err := store.Set(containerStore, string(jsonCS), 0) assert.Nil(t, err) jsonNull, _ := json.Marshal(map[string]string{}) minionDirKey := path.Join(nodeStore, "1.2.3.4") err = store.Set(path.Join(minionDirKey, minionIPStore), string(jsonNull), 0) assert.Nil(t, err) updateWorker(view, db.Minion{PrivateIP: "1.2.3.4", Subnet: "10.1.0.0"}, store, storeData{containers: cs}) ipMap := map[int]string{} labelMap := map[int][]string{} commandMap := map[string][]string{} envMap := map[string]map[string]string{} for _, c := range view.SelectFromContainer(nil) { ipMap[c.StitchID] = c.IP labelMap[c.StitchID] = c.Labels commandMap[c.DockerID] = c.Command envMap[c.DockerID] = c.Env } expIPMap := map[int]string{ 1: "10.1.0.0", 2: "10.1.0.1", } assert.Equal(t, expIPMap, ipMap) resultMap := map[string]string{} storeIPs, _ := store.Get(path.Join(minionDirKey, minionIPStore)) json.Unmarshal([]byte(storeIPs), &resultMap) for id, ip := range resultMap { sid, _ := strconv.Atoi(id) if otherIP, ok := ipMap[sid]; !ok || ip != otherIP { t.Fatalf("IPs did not match: %s vs %s", ip, otherIP) } } expLabelMap := map[int][]string{ 1: {"red", "blue"}, 2: {"blue", "green"}, } assert.Equal(t, expLabelMap, labelMap) }