1 /**
2 * Copyright 2020 Huawei Technologies Co., Ltd
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 #include <fcntl.h>
17 #include <iostream>
18 #include <memory>
19 #include "common/common_test.h"
20 #include "utils/system/file_system.h"
21 #include "utils/system/env.h"
22 #define private public
23 #include "debug/data_dump/dump_json_parser.h"
24 #undef private
25
26 namespace mindspore {
27 class TestMemoryDumper : public UT::Common {
28 public:
TestMemoryDumper()29 TestMemoryDumper() {}
30 };
31
TEST_F(TestMemoryDumper,test_DumpToFileAbsPath)32 TEST_F(TestMemoryDumper, test_DumpToFileAbsPath) {
33 int len = 1000;
34 int data[len] = {0};
35 for (uint32_t i = 0; i < len; i++) {
36 data[i] = i % 10;
37 }
38
39 int ret;
40 const std::string filename = "/tmp/dumpToFileTestFile";
41 ret = DumpJsonParser::DumpToFile(filename, data, len * sizeof(int), ShapeVector{10, 100}, kNumberTypeInt32);
42 ASSERT_EQ(ret, true);
43
44 int fd = open((filename + ".npy").c_str(), O_RDONLY);
45 int header_size = 32;
46 int npylen = len + header_size;
47 int readBack[npylen] = {0};
48 int readSize = read(fd, readBack, npylen * sizeof(int));
49 (void)close(fd);
50 ASSERT_EQ(readSize, npylen * sizeof(int));
51
52 ret = true;
53 for (uint32_t i = 0; i < len; i++) {
54 // Skip the size of npy header.
55 if (data[i] != readBack[i+header_size]) {
56 ret = false;
57 break;
58 }
59 }
60 std::shared_ptr<system::FileSystem> fs = system::Env::GetFileSystem();
61 if (fs->FileExist(filename)) {
62 fs->DeleteFile(filename);
63 }
64 ASSERT_EQ(ret, true);
65 }
66
TEST_F(TestMemoryDumper,test_DumpToFileRelativePath)67 TEST_F(TestMemoryDumper, test_DumpToFileRelativePath) {
68 int len = 1000;
69 int data[len] = {0};
70 for (uint32_t i = 0; i < len; i++) {
71 data[i] = i % 10;
72 }
73
74 int ret;
75 const std::string filename = "../../dumpToFileTestFile";
76 ret = DumpJsonParser::DumpToFile(filename, data, len * sizeof(int), ShapeVector{100, 10}, kNumberTypeInt32);
77 ASSERT_EQ(ret, false);
78 }
79
TEST_F(TestMemoryDumper,test_DumpToFileNotExistDir)80 TEST_F(TestMemoryDumper, test_DumpToFileNotExistDir) {
81 int len = 1;
82 int data[1] = {0};
83 for (uint32_t i = 0; i < len; i++) {
84 data[i] = i % 10;
85 }
86
87 const std::string filename = "./tmp/dumpToFileTestFile";
88 int ret = DumpJsonParser::DumpToFile(filename, data, len * sizeof(int), ShapeVector {1,}, kNumberTypeInt32);
89 ASSERT_EQ(ret, true);
90
91 int fd = open((filename + ".npy").c_str(), O_RDONLY);
92 int readBack[1000] = {0};
93 int readSize = read(fd, readBack, len * sizeof(int));
94 (void)close(fd);
95 ASSERT_EQ(readSize, len * sizeof(int));
96
97 ret = true;
98 for (uint32_t i = 0; i < len; i++) {
99 // Skip the size of npy header.
100 if (data[i] != readBack[i+1]) {
101 ret = false;
102 break;
103 }
104 }
105 std::shared_ptr<system::FileSystem> fs = system::Env::GetFileSystem();
106 if (fs->FileExist(filename)) {
107 fs->DeleteFile(filename);
108 }
109
110 ASSERT_EQ(ret, true);
111 }
112 } // namespace mindspore
113