|
10 | 10 | import shutil |
11 | 11 | import tempfile |
12 | 12 | import unittest |
| 13 | +import warnings |
13 | 14 | from pathlib import Path |
14 | 15 |
|
15 | 16 | import numpy as np |
@@ -61,3 +62,38 @@ def test_load_ncd(self, subdir: str) -> None: |
61 | 62 | Path.unlink(data_path) |
62 | 63 | with self.assertRaises(SigMFFileError): |
63 | 64 | _ = fromfile(meta_path) |
| 65 | + |
| 66 | + def test_ncd_priority_over_conforming_dataset(self) -> None: |
| 67 | + """test that NCD file specified in core:dataset is prioritized over .sigmf-data file""" |
| 68 | + base_name = "conflicting_dataset" |
| 69 | + meta_path = self.temp_dir / f"{base_name}.sigmf-meta" |
| 70 | + ncd_path = self.temp_dir / f"{base_name}.fleeb" |
| 71 | + conforming_path = self.temp_dir / f"{base_name}.sigmf-data" |
| 72 | + |
| 73 | + # create two different datasets with distinct data for verification |
| 74 | + ncd_data = np.array([100, 200, 300, 400], dtype=np.float32) |
| 75 | + conforming_data = np.array([1, 2, 3, 4], dtype=np.float32) |
| 76 | + |
| 77 | + # write both data files |
| 78 | + ncd_data.tofile(ncd_path) |
| 79 | + conforming_data.tofile(conforming_path) |
| 80 | + |
| 81 | + # create metadata that references the ncd file |
| 82 | + ncd_metadata = copy.deepcopy(TEST_METADATA) |
| 83 | + ncd_metadata[SigMFFile.GLOBAL_KEY][SigMFFile.DATASET_KEY] = f"{base_name}.fleeb" |
| 84 | + ncd_metadata[SigMFFile.GLOBAL_KEY][SigMFFile.NUM_CHANNELS_KEY] = 1 |
| 85 | + ncd_metadata[SigMFFile.GLOBAL_KEY][SigMFFile.DATATYPE_KEY] = "rf32_le" |
| 86 | + ncd_metadata[SigMFFile.GLOBAL_KEY].pop(SigMFFile.HASH_KEY, None) |
| 87 | + ncd_metadata[SigMFFile.ANNOTATION_KEY] = [{SigMFFile.LENGTH_INDEX_KEY: 4, SigMFFile.START_INDEX_KEY: 0}] |
| 88 | + |
| 89 | + # write metadata file |
| 90 | + meta = SigMFFile(metadata=ncd_metadata) |
| 91 | + meta.tofile(meta_path, overwrite=True) |
| 92 | + |
| 93 | + # verify warning is generated about conflicting datasets |
| 94 | + with self.assertWarns(UserWarning): |
| 95 | + loaded_meta = fromfile(meta_path) |
| 96 | + |
| 97 | + # verify that the ncd data is loaded, not the conforming data |
| 98 | + loaded_data = loaded_meta.read_samples() |
| 99 | + self.assertTrue(np.array_equal(ncd_data, loaded_data), "NCD file should be prioritized over .sigmf-data") |
0 commit comments