// fetchMachines returns a map from top level machine id to machines, where machines[0] is the host // machine and machines[1..n] are any containers (including nested ones). // // If machineIds is non-nil, only machines whose IDs are in the set are returned. func fetchMachines(st *state.State, machineIds *set.Strings) (map[string][]*state.Machine, error) { v := make(map[string][]*state.Machine) machines, err := st.AllMachines() if err != nil { return nil, err } // AllMachines gives us machines sorted by id. for _, m := range machines { if machineIds != nil && !machineIds.Contains(m.Id()) { continue } parentId, ok := m.ParentId() if !ok { // Only top level host machines go directly into the machine map. v[m.Id()] = []*state.Machine{m} } else { topParentId := state.TopParentId(m.Id()) machines, ok := v[topParentId] if !ok { panic(fmt.Errorf("unexpected machine id %q", parentId)) } machines = append(machines, m) v[topParentId] = machines } } return v, nil }
func (stringSetSuite) TestUninitialized(c *C) { var uninitialized set.Strings c.Assert(uninitialized.Size(), Equals, 0) c.Assert(uninitialized.IsEmpty(), Equals, true) // You can get values and sorted values from an unitialized set. AssertValues(c, uninitialized) // All contains checks are false c.Assert(uninitialized.Contains("foo"), Equals, false) // Remove works on an uninitialized Strings uninitialized.Remove("foo") var other set.Strings // Union returns a new set that is empty but initialized. c.Assert(uninitialized.Union(other), DeepEquals, set.NewStrings()) c.Assert(uninitialized.Intersection(other), DeepEquals, set.NewStrings()) c.Assert(uninitialized.Difference(other), DeepEquals, set.NewStrings()) other = set.NewStrings("foo", "bar") c.Assert(uninitialized.Union(other), DeepEquals, other) c.Assert(uninitialized.Intersection(other), DeepEquals, set.NewStrings()) c.Assert(uninitialized.Difference(other), DeepEquals, set.NewStrings()) c.Assert(other.Union(uninitialized), DeepEquals, other) c.Assert(other.Intersection(uninitialized), DeepEquals, set.NewStrings()) c.Assert(other.Difference(uninitialized), DeepEquals, other) // Once something is added, the set becomes initialized. uninitialized.Add("foo") AssertValues(c, uninitialized, "foo") }