|
21 | 21 |
|
22 | 22 | using namespace intel_npu;
|
23 | 23 |
|
24 |
| -using BlobContainerUnitTests = ::testing::Test; |
25 |
| - |
26 |
| -namespace { |
27 |
| -const char* dummyBlobHeader = "blobwillstartafterspace correctblob!"; |
28 |
| -const char* testCacheDir = "blob_container_test_cache_dir"; |
29 |
| -const char* testFileName = "blob_container_test.blob"; |
| 24 | +class BlobContainerUnitTests : public ::testing::Test { |
| 25 | +protected: |
| 26 | + void TearDown() override { |
| 27 | + ov::util::iterate_files(testCacheDir, [](const std::string& file, bool is_dir) { |
| 28 | + if (!is_dir) { |
| 29 | + ov::test::utils::removeFile(file); |
| 30 | + } |
| 31 | + }); |
| 32 | + ov::test::utils::removeDir(testCacheDir); |
| 33 | + ov::test::utils::removeFile(testFileName); |
| 34 | + } |
30 | 35 |
|
31 |
| -} // namespace |
| 36 | + const char* dummyBlobHeader = "blobwillstartafterspace "; |
| 37 | + const char* testCacheDir = "blob_container_test_cache_dir"; |
| 38 | + const char* testFileName = "blob_container_test.blob"; |
| 39 | +}; |
32 | 40 |
|
33 | 41 | TEST_F(BlobContainerUnitTests, isBlobContainerCorrectlyPickedForCacheEnabled) {
|
34 | 42 | auto core = std::make_shared<ov::CoreImpl>();
|
@@ -59,18 +67,26 @@ TEST_F(BlobContainerUnitTests, isBlobContainerCorrectlyPickedForCacheEnabled) {
|
59 | 67 | auto inferRequest = compiledModel->create_infer_request();
|
60 | 68 | inferRequest->infer();
|
61 | 69 | OV_ASSERT_NO_THROW(auto profilingInfo = inferRequest->get_profiling_info());
|
| 70 | + |
62 | 71 | auto outputFile =
|
63 |
| - std::ofstream(std::filesystem::path(testCacheDir) / testFileName, std::ios::out | std::ios::binary); |
| 72 | + std::ofstream(ov::util::Path::path(testCacheDir) / testFileName, std::ios::out | std::ios::binary); |
| 73 | + std::ostringstream blobStream; |
64 | 74 | OV_ASSERT_NO_THROW(compiledModel->export_model(outputFile));
|
| 75 | + OV_ASSERT_NO_THROW(compiledModel->export_model(blobStream)); |
65 | 76 |
|
66 | 77 | auto* compiledModelPtr = dynamic_cast<intel_npu::ICompiledModel*>(compiledModel._ptr.get());
|
67 | 78 | OPENVINO_ASSERT(compiledModelPtr != nullptr);
|
68 | 79 | const auto& blobContainer = compiledModelPtr->get_graph()->get_blob_container();
|
69 | 80 | auto* blobContainerAlignedBufferPtr =
|
70 | 81 | dynamic_cast<const intel_npu::BlobContainerAlignedBuffer*>(&blobContainer);
|
71 | 82 | OPENVINO_ASSERT(blobContainerAlignedBufferPtr != nullptr, "Cached blob should be memory mapped!");
|
| 83 | + |
| 84 | + // Expect output stream with metadata to be larger than actual blob size |
| 85 | + OPENVINO_ASSERT(outputFile.tellp() > 0 && blobContainer.size() > 0 && |
| 86 | + static_cast<size_t>(outputFile.tellp()) > blobContainer.size()); |
| 87 | + OPENVINO_ASSERT(blobStream.tellp() > 0 && blobContainer.size() > 0 && |
| 88 | + static_cast<size_t>(blobStream.tellp()) > blobContainer.size()); |
72 | 89 | }
|
73 |
| - ov::test::utils::removeDir(testCacheDir); |
74 | 90 | }
|
75 | 91 |
|
76 | 92 | TEST_F(BlobContainerUnitTests, isBlobContainerCorrectlyPickedForFStream) {
|
@@ -104,7 +120,6 @@ TEST_F(BlobContainerUnitTests, isBlobContainerCorrectlyPickedForFStream) {
|
104 | 120 | dynamic_cast<const intel_npu::BlobContainerAlignedBuffer*>(&blobContainer);
|
105 | 121 | OPENVINO_ASSERT(blobContainerAlignedBufferPtr == nullptr, "Cannot have memory mapped blob for std::fstream!");
|
106 | 122 | }
|
107 |
| - ov::test::utils::removeFile(testFileName); |
108 | 123 | }
|
109 | 124 |
|
110 | 125 | TEST_F(BlobContainerUnitTests, isBlobContainerCorrectlyPickedForSStream) {
|
@@ -161,35 +176,42 @@ TEST_F(BlobContainerUnitTests, isBlobHeaderHandledCorrectly) {
|
161 | 176 | std::string parseDummyHeader;
|
162 | 177 | std::string blob;
|
163 | 178 | blobStream >> parseDummyHeader;
|
| 179 | + blobStream.get(); |
164 | 180 |
|
165 |
| - EXPECT_THAT(parseDummyHeader, testing::HasSubstr("blobwillstartafterspace")); |
166 | 181 | auto compiledModel =
|
167 | 182 | core->import_model(blobStream, ov::test::utils::DEVICE_NPU, {ov::intel_npu::defer_weights_load(true)});
|
168 |
| - blobStream = {}; |
169 | 183 |
|
170 | 184 | auto* compiledModelPtr = dynamic_cast<intel_npu::ICompiledModel*>(compiledModel._ptr.get());
|
171 | 185 | OPENVINO_ASSERT(compiledModelPtr != nullptr);
|
172 | 186 | const auto& blobContainer = compiledModelPtr->get_graph()->get_blob_container();
|
173 | 187 | blob.assign(reinterpret_cast<const char*>(blobContainer.get_ptr()), blobContainer.size());
|
174 |
| - EXPECT_THAT(blob, testing::HasSubstr("correctblob!")); |
| 188 | + ASSERT_EQ(blobStream.str().substr(std::strlen(dummyBlobHeader), blobContainer.size()), blob); |
175 | 189 | }
|
176 | 190 |
|
177 | 191 | {
|
178 | 192 | std::string parseDummyHeader;
|
179 | 193 | std::string blob;
|
| 194 | + std::string referenceBlob; |
180 | 195 | auto inputFile = std::ifstream(testFileName, std::ios::in | std::ios::binary);
|
181 |
| - blobStream >> parseDummyHeader; |
| 196 | + inputFile >> parseDummyHeader; |
| 197 | + inputFile.get(); |
| 198 | + |
| 199 | + std::streampos currentPos = inputFile.tellg(); |
| 200 | + inputFile.seekg(0, std::ios::end); |
| 201 | + std::streampos endPos = inputFile.tellg(); |
| 202 | + inputFile.seekg(currentPos, std::ios::beg); |
| 203 | + referenceBlob.resize(endPos - currentPos); |
| 204 | + inputFile.read(&referenceBlob[0], referenceBlob.size()); |
| 205 | + inputFile.seekg(currentPos, std::ios::beg); |
182 | 206 |
|
183 |
| - EXPECT_THAT(parseDummyHeader, testing::HasSubstr("blobwillstartafterspace")); |
184 | 207 | auto compiledModel =
|
185 |
| - core->import_model(blobStream, ov::test::utils::DEVICE_NPU, {ov::intel_npu::defer_weights_load(true)}); |
| 208 | + core->import_model(inputFile, ov::test::utils::DEVICE_NPU, {ov::intel_npu::defer_weights_load(true)}); |
186 | 209 |
|
187 | 210 | auto* compiledModelPtr = dynamic_cast<intel_npu::ICompiledModel*>(compiledModel._ptr.get());
|
188 | 211 | OPENVINO_ASSERT(compiledModelPtr != nullptr);
|
189 | 212 | const auto& blobContainer = compiledModelPtr->get_graph()->get_blob_container();
|
190 | 213 | blob.assign(reinterpret_cast<const char*>(blobContainer.get_ptr()), blobContainer.size());
|
191 |
| - EXPECT_THAT(blob, testing::HasSubstr("correctblob!")); |
| 214 | + referenceBlob.resize(blobContainer.size()); // exclude metadata |
| 215 | + ASSERT_EQ(referenceBlob, blob); |
192 | 216 | }
|
193 |
| - |
194 |
| - ov::test::utils::removeFile(testFileName); |
195 | 217 | }
|
0 commit comments