def test_collect_request(self):
     req_collect = request.Collector(
         requests_impl=FakeRequestsSoftwareConfig)
     req_md = req_collect.collect()
     self.assertEqual(4, len(req_md))
     self.assertEqual(
         SOFTWARE_CONFIG_DATA['deployments'], req_md[0][1]['deployments'])
     self.assertEqual(
         ('dep-name1', {'config1': 'value1'}), req_md[1])
     self.assertEqual(
         ('dep-name2', {'config2': 'value2'}), req_md[2])
     self.assertEqual(
         ('dep-name3', {'config3': 'value3'}), req_md[3])
    def test_collect_request(self):
        req_collect = request.Collector(requests_impl=FakeRequests)
        self.assertIsNone(req_collect.last_modified)
        req_md = req_collect.collect()
        self.assertIsNotNone(req_collect.last_modified)
        self.assertThat(req_md, matchers.IsInstance(list))
        self.assertEqual('request', req_md[0][0])
        req_md = req_md[0][1]

        for k in ('int1', 'strfoo', 'map_ab'):
            self.assertIn(k, req_md)
            self.assertEqual(req_md[k], META_DATA[k])

        self.assertEqual('', self.log.output)
    def test_check_fetch_content(self):
        req_collect = request.Collector()

        now_secs = calendar.timegm(time.gmtime())
        now_str = time.strftime("%a, %d %b %Y %H:%M:%S %Z",
                                time.gmtime(now_secs))

        future_secs = calendar.timegm(time.gmtime()) + 10
        future_str = time.strftime("%a, %d %b %Y %H:%M:%S %Z",
                                   time.gmtime(future_secs))

        past_secs = calendar.timegm(time.gmtime()) - 10
        past_str = time.strftime("%a, %d %b %Y %H:%M:%S %Z",
                                 time.gmtime(past_secs))

        self.assertIsNone(req_collect.last_modified)

        # first run always collects
        self.assertEqual(
            now_secs,
            req_collect.check_fetch_content({'last-modified': now_str}))

        # second run unmodified, does not collect
        req_collect.last_modified = now_secs
        self.assertRaises(exc.RequestMetadataNotAvailable,
                          req_collect.check_fetch_content,
                          {'last-modified': now_str})

        # run with later date, collects
        self.assertEqual(
            future_secs,
            req_collect.check_fetch_content({'last-modified': future_str}))

        # run with earlier date, does not collect
        self.assertRaises(exc.RequestMetadataNotAvailable,
                          req_collect.check_fetch_content,
                          {'last-modified': past_str})

        # run no last-modified header, collects
        self.assertIsNone(req_collect.check_fetch_content({}))
 def test_collect_request_no_metadata_url(self):
     cfg.CONF.request.metadata_url = None
     req_collect = request.Collector(requests_impl=FakeRequests)
     self.assertRaises(exc.RequestMetadataNotConfigured,
                       req_collect.collect)
     self.assertIn('No metadata_url configured', self.log.output)
 def test_collect_request_fail(self):
     req_collect = request.Collector(requests_impl=FakeFailRequests)
     self.assertRaises(exc.RequestMetadataNotAvailable, req_collect.collect)
     self.assertIn('Forbidden', self.log.output)