Example #1
0
func (exchanger exchanger) Infos(logger lager.Logger, gardenClient garden.Client, gardenContainers []garden.Container) ([]executor.Container, error) {
	handles := make([]string, 0, len(gardenContainers))
	for _, c := range gardenContainers {
		handles = append(handles, c.Handle())
	}
	logger = logger.Session("infos", lager.Data{"handles": handles})

	logger.Debug("get-bulk-info")
	infos, err := gardenClient.BulkInfo(handles)
	if err != nil {
		logger.Error("failed-bulk-info", err)
		return []executor.Container{}, err
	}
	logger.Debug("succeeded-bulk-info")

	var containerInfos []executor.Container

	for handle, info := range infos {
		if info.Err != nil {
			logger.Error("failed-garden-info", info.Err, lager.Data{
				"handle": handle,
			})
			continue
		}

		container, err := garden2executor(handle, info.Info)
		if err != nil {
			logger.Error("failed-garden2executor", err, lager.Data{
				"handle": handle,
			})
			continue
		}

		containerInfos = append(containerInfos, container)
	}

	return containerInfos, nil
}
				"handle1": garden.ContainerInfoEntry{
					Info: garden.ContainerInfo{
						State: "container1state",
					},
				},
				"handle2": garden.ContainerInfoEntry{
					Info: garden.ContainerInfo{
						State: "container2state",
					},
				},
			}

			It("reports information about containers by list of handles", func() {
				serverBackend.BulkInfoReturns(expectedBulkInfo, nil)

				bulkInfo, err := apiClient.BulkInfo(handles)
				Ω(err).ShouldNot(HaveOccurred())
				Ω(bulkInfo).To(Equal(expectedBulkInfo))
			})

			Context("when retrieving bulk info fails", func() {
				It("returns the error", func() {
					serverBackend.BulkInfoReturns(
						make(map[string]garden.ContainerInfoEntry),
						errors.New("Oh noes!"),
					)

					_, err := apiClient.BulkInfo(handles)
					Ω(err).Should(MatchError("Oh noes!"))
				})
			})