func FetchDesiredState(l logger.Logger, c *cli.Context) { conf := loadConfig(l, c) messageBus := connectToMessageBus(l, conf) store := connectToStore(l, conf) fetcher := desiredstatefetcher.New(conf, messageBus, store, httpclient.NewHttpClient(), timeprovider.NewTimeProvider(), ) resultChan := make(chan desiredstatefetcher.DesiredStateFetcherResult, 1) fetcher.Fetch(resultChan) select { case result := <-resultChan: if result.Success { l.Info("Success", map[string]string{"Number of Desired Apps Fetched": strconv.Itoa(result.NumResults)}) os.Exit(0) } else { l.Info(result.Message, map[string]string{"Error": result.Error.Error(), "Message": result.Message}) os.Exit(1) } case <-time.After(600 * time.Second): l.Info("Timed out when fetching desired state", nil) os.Exit(1) } }
func fetchDesiredState(l logger.Logger, conf *config.Config, store store.Store) error { l.Info("Fetching Desired State") fetcher := desiredstatefetcher.New(conf, store, metricsaccountant.New(store), httpclient.NewHttpClient(conf.SkipSSLVerification, conf.FetcherNetworkTimeout()), buildTimeProvider(l), l, ) resultChan := make(chan desiredstatefetcher.DesiredStateFetcherResult, 1) fetcher.Fetch(resultChan) result := <-resultChan if result.Success { l.Info("Success", map[string]string{"Number of Desired Apps Fetched": strconv.Itoa(result.NumResults)}) return nil } else { l.Error(result.Message, result.Error) return result.Error } return nil }
resultChan = make(chan desiredstatefetcher.DesiredStateFetcherResult, 1) a1 = appfixture.NewAppFixture() a2 = appfixture.NewAppFixture() a3 = appfixture.NewAppFixture() stateServer.SetDesiredState([]models.DesiredAppState{ a1.DesiredState(1), a2.DesiredState(1), a3.DesiredState(1), }) conf, _ = config.DefaultConfig() store = storepackage.NewStore(conf, storeAdapter, fakelogger.NewFakeLogger()) fetcher = desiredstatefetcher.New(conf, store, fakemetricsaccountant.New(), httpclient.NewHttpClient(conf.SkipSSLVerification, conf.FetcherNetworkTimeout()), &timeprovider.RealTimeProvider{}, fakelogger.NewFakeLogger()) fetcher.Fetch(resultChan) }) It("requests for the first set of data from the CC and stores the response", func() { var desired map[string]models.DesiredAppState var err error Eventually(func() interface{} { desired, err = store.GetDesiredState() return desired }, 1, 0.1).ShouldNot(BeEmpty()) Ω(desired).Should(HaveKey(a1.AppGuid + "," + a1.AppVersion)) Ω(desired).Should(HaveKey(a2.AppGuid + "," + a2.AppVersion)) Ω(desired).Should(HaveKey(a3.AppGuid + "," + a3.AppVersion)) })
resultChan = make(chan desiredstatefetcher.DesiredStateFetcherResult, 1) a1 = appfixture.NewAppFixture() a2 = appfixture.NewAppFixture() a3 = appfixture.NewAppFixture() stateServer.SetDesiredState([]models.DesiredAppState{ a1.DesiredState(1), a2.DesiredState(1), a3.DesiredState(1), }) conf, _ = config.DefaultConfig() store = storepackage.NewStore(conf, storeAdapter, fakelogger.NewFakeLogger()) fetcher = desiredstatefetcher.New(conf, store, &fakemetricsaccountant.FakeMetricsAccountant{}, httpclient.NewHttpClient(conf.SkipSSLVerification, conf.FetcherNetworkTimeout()), clock.NewClock(), fakelogger.NewFakeLogger()) fetcher.Fetch(resultChan) }) It("requests for the first set of data from the CC and stores the response", func() { var desired map[string]models.DesiredAppState var err error Eventually(func() interface{} { desired, err = store.GetDesiredState() return desired }, 1, 0.1).ShouldNot(BeEmpty()) Ω(desired).Should(HaveKey(a1.AppGuid + "," + a1.AppVersion)) Ω(desired).Should(HaveKey(a2.AppGuid + "," + a2.AppVersion)) Ω(desired).Should(HaveKey(a3.AppGuid + "," + a3.AppVersion)) })
resultChan chan desiredstatefetcher.DesiredStateFetcherResult ) BeforeEach(func() { resultChan = make(chan desiredstatefetcher.DesiredStateFetcherResult, 1) a1 = app.NewApp() a2 = app.NewApp() a3 = app.NewApp() stateServer.SetDesiredState([]models.DesiredAppState{ a1.DesiredState(0), a2.DesiredState(0), a3.DesiredState(0), }) fetcher = desiredstatefetcher.New(conf, natsRunner.MessageBus, store.NewStore(conf, storeAdapter), httpclient.NewHttpClient(), &timeprovider.RealTimeProvider{}) fetcher.Fetch(resultChan) }) It("requests for the first set of data from the CC and stores the response", func() { var node storeadapter.StoreNode var err error Eventually(func() error { node, err = storeAdapter.Get("/desired/" + a1.AppGuid + "-" + a1.AppVersion) return err }, 1, 0.1).ShouldNot(HaveOccured()) Ω(node.TTL).Should(BeNumerically("<=", 10*60)) Ω(node.TTL).Should(BeNumerically(">=", 10*60-1)) Ω(node.Value).Should(Equal(a1.DesiredState(0).ToJson()))