コード例 #1
0
    def test_fetch_multiple_lines_with_scroll(self):
        es = Mock()
        es_follow = elasticsearch_follow.ElasticsearchFollow(es)

        timestamp = datetime(year=2019,
                             month=1,
                             day=1,
                             hour=10,
                             minute=1,
                             tzinfo=tz.UTC)
        es.search.return_value = generate_query_response([
            generate_hit_entry("id_1", "line1", timestamp),
            generate_hit_entry("id_2", "line2", timestamp),
        ])

        scroll_response = generate_query_response([
            generate_hit_entry("id_3", "line3", timestamp),
            generate_hit_entry("id_4", "line4", timestamp),
        ])
        empty_scroll_response = generate_query_response([])
        es.scroll.side_effect = [scroll_response, empty_scroll_response]

        new_lines = list(es_follow.get_new_lines("my_index", None))

        self.assertEqual(len(new_lines), 4)
        messages = [e["msg"] for e in new_lines]
        self.assertEqual(messages, ["line1", "line2", "line3", "line4"])
コード例 #2
0
    def test_prune_existing_remains(self):
        es = Mock()
        es_follow = elasticsearch_follow.ElasticsearchFollow(es)

        entry_timestamp = datetime(year=2019,
                                   month=1,
                                   day=1,
                                   hour=10,
                                   minute=10,
                                   tzinfo=tz.UTC)
        entry_id = "id_1"
        es.search.return_value = generate_basic_query_response(
            entry_id, "line1", entry_timestamp)
        es.scroll.return_value = generate_query_response([])

        list(es_follow.get_new_lines("my_index", None))

        timestamp = datetime(year=2019,
                             month=1,
                             day=1,
                             hour=10,
                             minute=0,
                             tzinfo=tz.UTC)
        es_follow.prune_before(timestamp)

        self.assertEqual(len(es_follow.entry_tracker.added_entries), 1)
        self.assertIn(entry_id, es_follow.entry_tracker.added_entries)

        self.assertEqual(len(es_follow.entry_tracker.entries_by_timestamp), 1)
        remaining_entry = es_follow.entry_tracker.entries_by_timestamp[0]
        self.assertEqual(remaining_entry.entry_id, entry_id)
        self.assertEqual(remaining_entry.timestamp, entry_timestamp)
コード例 #3
0
    def test_prune_only_element(self):
        es = Mock()
        es_follow = elasticsearch_follow.ElasticsearchFollow(es)
        timestamp_first_entry = datetime(year=2019,
                                         month=1,
                                         day=1,
                                         hour=10,
                                         minute=0,
                                         tzinfo=tz.UTC)
        es.search.return_value = generate_basic_query_response(
            "id_1", "line1", timestamp_first_entry)
        es.scroll.return_value = generate_query_response([])

        list(es_follow.get_new_lines("my_index", None))

        timestamp = datetime(year=2019,
                             month=1,
                             day=1,
                             hour=10,
                             minute=10,
                             tzinfo=tz.UTC)
        es_follow.prune_before(timestamp)

        self.assertEqual(len(es_follow.entry_tracker.added_entries), 0)
        self.assertEqual(len(es_follow.entry_tracker.entries_by_timestamp), 0)
コード例 #4
0
 def setup():
     datetime_mock = Mock(wraps=datetime)
     now = datetime(year=2019, month=1, day=1, hour=10, minute=0)
     datetime_mock.utcnow = Mock(return_value=now)
     patch(
         "elasticsearch_follow.follower.datetime.datetime", new=datetime_mock
     ).start()
     es = Mock()
     es.scroll.return_value = generate_query_response([])
     es_follow = elasticsearch_follow.ElasticsearchFollow(es)
     return es, es_follow
コード例 #5
0
    def test_fetch_one_line(self):
        es = Mock()
        es_follow = elasticsearch_follow.ElasticsearchFollow(es)
        timestamp_first_entry = datetime(year=2019,
                                         month=1,
                                         day=1,
                                         hour=10,
                                         minute=1,
                                         tzinfo=tz.UTC)
        es.search.return_value = generate_basic_query_response(
            "id_1", "line1", timestamp_first_entry)
        es.scroll.return_value = generate_query_response([])

        new_lines = list(es_follow.get_new_lines("my_index", None))

        self.assertEqual(len(new_lines), 1)
        self.assertIn("msg", new_lines[0])
        self.assertEqual(new_lines[0]["msg"], "line1")