|
18 | 18 | import os
|
19 | 19 | from datalake_common.tests import random_word
|
20 | 20 | from datalake_common.errors import InsufficientConfiguration
|
21 |
| -from datalake import Enqueuer, Uploader |
| 21 | +from datalake import Enqueuer, Uploader, InvalidDatalakeBundle |
22 | 22 | from datalake.queue import has_queue
|
23 | 23 | from conftest import crtime_setuid
|
24 | 24 | from gzip import GzipFile
|
@@ -71,6 +71,15 @@ def validator(f):
|
71 | 71 | return validator
|
72 | 72 |
|
73 | 73 |
|
| 74 | +@pytest.fixture |
| 75 | +def assert_s3_bucket_empty(s3_bucket): |
| 76 | + |
| 77 | + def asserter(): |
| 78 | + assert len([k for k in s3_bucket.list()]) == 0 |
| 79 | + |
| 80 | + return asserter |
| 81 | + |
| 82 | + |
74 | 83 | @pytest.fixture
|
75 | 84 | def random_file(tmpfile, random_metadata):
|
76 | 85 | expected_content = random_word(100)
|
@@ -103,6 +112,40 @@ def enqueue():
|
103 | 112 | uploaded_file_validator(f)
|
104 | 113 |
|
105 | 114 |
|
| 115 | +@pytest.mark.skipif(not has_queue, reason='requires queuable features') |
| 116 | +def test_skip_incoming_dotfile(random_file, queue_dir, uploader, |
| 117 | + assert_s3_bucket_empty): |
| 118 | + |
| 119 | + def enqueue(): |
| 120 | + enqueued_name = os.path.join(queue_dir, '.ignoreme') |
| 121 | + os.rename(str(random_file), enqueued_name) |
| 122 | + |
| 123 | + t = Timer(0.5, enqueue) |
| 124 | + t.start() |
| 125 | + uploader.listen(timeout=1.0) |
| 126 | + |
| 127 | + assert_s3_bucket_empty() |
| 128 | + |
| 129 | + |
| 130 | +@pytest.mark.skipif(not has_queue, reason='requires queuable features') |
| 131 | +def test_skip_invalid_bundles(random_file, queue_dir, uploader, |
| 132 | + assert_s3_bucket_empty): |
| 133 | + |
| 134 | + def enqueue(): |
| 135 | + enqueued_name = os.path.join(queue_dir, 'invalid-bundle') |
| 136 | + os.rename(str(random_file), enqueued_name) |
| 137 | + |
| 138 | + t = Timer(0.5, enqueue) |
| 139 | + t.start() |
| 140 | + |
| 141 | + try: |
| 142 | + uploader.listen(timeout=1.0) |
| 143 | + except InvalidDatalakeBundle: |
| 144 | + pytest.fail("Didn't catch InvalidDatalakeBundle exception.") |
| 145 | + |
| 146 | + assert_s3_bucket_empty() |
| 147 | + |
| 148 | + |
106 | 149 | @pytest.mark.skipif(not has_queue, reason='requires queuable features')
|
107 | 150 | def test_upload_existing_cli(cli_tester, random_file, random_metadata,
|
108 | 151 | uploaded_content_validator, queue_dir):
|
|
0 commit comments