test,base: Added GTest for base/loader/image_file_data.cc
authorBobby R. Bruce <bbruce@ucdavis.edu>
Wed, 13 Nov 2019 02:57:36 +0000 (18:57 -0800)
committerBobby R. Bruce <bbruce@ucdavis.edu>
Thu, 21 Nov 2019 20:28:16 +0000 (20:28 +0000)
image_file_data.cc reads an image file, or an image file compressed with
gzip. Mock image file data, and that data in a gzipped state, has been
included in base/loader/small_image_file.test.hh to aid testing.

Change-Id: I69691b93ca03c34d6bd736cbc5c6503115bd7b3f
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/22743
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/base/SConscript
src/base/loader/image_file_data.test.cc [new file with mode: 0644]
src/base/loader/small_image_file.test.hh [new file with mode: 0644]

index a011463848c0e7189f52921e64b98670f350d79e..c9162b47276c8f86380ef81d2088e2552c2d8878 100644 (file)
@@ -84,6 +84,8 @@ Source('loader/dtb_file.cc')
 Source('loader/ecoff_object.cc')
 Source('loader/elf_object.cc')
 Source('loader/image_file_data.cc')
+GTest('loader/image_file_data.test', 'loader/image_file_data.test.cc',
+'loader/image_file_data.cc')
 Source('loader/memory_image.cc')
 Source('loader/object_file.cc')
 Source('loader/symtab.cc')
diff --git a/src/base/loader/image_file_data.test.cc b/src/base/loader/image_file_data.test.cc
new file mode 100644 (file)
index 0000000..61eeae1
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2019 The Regents of the University of California
+ * All rights reserved
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Bobby R. Bruce
+ */
+
+#include <gtest/gtest.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <cstdlib>
+
+#include "base/loader/image_file_data.hh"
+#include "base/loader/small_image_file.test.hh"
+
+TEST(ImageFileDataTest, SimpleImage)
+{
+    /*
+     * Create a temporary file from our data blob.
+     */
+    char filename[] = "image-XXXXXX";
+    int fd = mkstemp(filename);
+    ASSERT_NE(-1, fd);
+    ssize_t size = write(fd, image_file, sizeof(image_file));
+
+    /*
+     * In this basic test, the image file is simply loaded to the
+     * ImageFileData object (i.e., no decompression).
+     */
+    ImageFileData idf(filename);
+
+    EXPECT_EQ(idf.filename(), filename);
+    EXPECT_EQ(size, idf.len());
+
+    for (size_t i = 0; i < sizeof(image_file); i++) {
+        EXPECT_EQ(image_file[i], idf.data()[i]);
+    }
+
+    /*
+     * Close and delete the temporary file.
+     */
+    close(fd);
+    unlink(filename);
+}
+
+
+TEST(ImageFileDataTest, GZipImage)
+{
+    /*
+     * Create temporary files from our data blobs.
+     */
+    char filename_gz[] = "image-XXXXXX";
+    int fd_gz = mkstemp(filename_gz);
+    ASSERT_NE(-1, fd_gz);
+    ssize_t size_gz = write(fd_gz, image_file_gzipped,
+                            sizeof(image_file_gzipped));
+
+    char filename[] = "image-XXXXXX";
+    int fd = mkstemp(filename);
+    ASSERT_NE(-1, fd);
+    ssize_t size = write(fd, image_file, sizeof(image_file));
+
+    /*
+     * ImageFileData decompresses a gzipped file. image_file_gzipped is just
+     * image_file gzipped. Therefore ifd_gz.len() should equal ifd.len() and
+     * ifd.data() should equal ifd_gz.data().
+     */
+    ImageFileData ifd_gz(filename_gz);
+    ImageFileData ifd(filename);
+
+    EXPECT_EQ(ifd.len(), ifd_gz.len());
+    EXPECT_EQ(size, ifd.len());
+    EXPECT_NE(size_gz, ifd_gz.len());
+
+    for (size_t index = 0; index < ifd.len(); index++) {
+        EXPECT_EQ(ifd.data()[index], ifd_gz.data()[index]);
+    }
+
+    /*
+     * Close and delete the temporary files.
+     */
+    close(fd);
+    unlink(filename);
+    close(fd_gz);
+    unlink(filename_gz);
+}
diff --git a/src/base/loader/small_image_file.test.hh b/src/base/loader/small_image_file.test.hh
new file mode 100644 (file)
index 0000000..df49f0b
--- /dev/null
@@ -0,0 +1,141 @@
+/*
+ * Copyright (c) 2019 The Regents of the University of California
+ * All rights reserved
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Bobby R. Bruce
+ */
+
+#ifndef __SMALL_IMAGE_FILE_HH__
+#define __SMALL_IMAGE_FILE_HH__
+
+#include <cstdint>
+
+/**
+ * This image file contains the text "This is a test image.\n" 31 times.
+ */
+const uint8_t image_file[] = {
+    0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
+    0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x69,
+    0x6d, 0x61, 0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68,
+    0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20,
+    0x74, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6d, 0x61,
+    0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73,
+    0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65,
+    0x73, 0x74, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65,
+    0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69,
+    0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74,
+    0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2e, 0x0a,
+    0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
+    0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x69,
+    0x6d, 0x61, 0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68,
+    0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20,
+    0x74, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6d, 0x61,
+    0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73,
+    0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65,
+    0x73, 0x74, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65,
+    0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69,
+    0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74,
+    0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2e, 0x0a,
+    0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
+    0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x69,
+    0x6d, 0x61, 0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68,
+    0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20,
+    0x74, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6d, 0x61,
+    0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73,
+    0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65,
+    0x73, 0x74, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65,
+    0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69,
+    0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74,
+    0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2e, 0x0a,
+    0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
+    0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x69,
+    0x6d, 0x61, 0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68,
+    0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20,
+    0x74, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6d, 0x61,
+    0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73,
+    0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65,
+    0x73, 0x74, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65,
+    0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69,
+    0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74,
+    0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2e, 0x0a,
+    0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
+    0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x69,
+    0x6d, 0x61, 0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68,
+    0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20,
+    0x74, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6d, 0x61,
+    0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73,
+    0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65,
+    0x73, 0x74, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65,
+    0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69,
+    0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74,
+    0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2e, 0x0a,
+    0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
+    0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x69,
+    0x6d, 0x61, 0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68,
+    0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20,
+    0x74, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6d, 0x61,
+    0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73,
+    0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65,
+    0x73, 0x74, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65,
+    0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69,
+    0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74,
+    0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2e, 0x0a,
+    0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
+    0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x69,
+    0x6d, 0x61, 0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68,
+    0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20,
+    0x74, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6d, 0x61,
+    0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73,
+    0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65,
+    0x73, 0x74, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65,
+    0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69,
+    0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74,
+    0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2e, 0x0a,
+    0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
+    0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x69,
+    0x6d, 0x61, 0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68,
+    0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20,
+    0x74, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6d, 0x61,
+    0x67, 0x65, 0x2e, 0x0a, 0x54, 0x68, 0x69, 0x73,
+    0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65,
+    0x73, 0x74, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65,
+    0x2e, 0x0a
+};
+
+/**
+ * This is "image_file" compressed using GZip.
+ */
+const uint8_t image_file_gzipped[] = {
+    0x1f, 0x8b, 0x08, 0x08, 0x48, 0x4b, 0xcb, 0x5d,
+    0x00, 0x03, 0x62, 0x6c, 0x61, 0x2e, 0x69, 0x6d,
+    0x67, 0x00, 0x0b, 0xc9, 0xc8, 0x2c, 0x56, 0x00,
+    0xa2, 0x44, 0x85, 0x92, 0xd4, 0xe2, 0x12, 0x85,
+    0xcc, 0xdc, 0xc4, 0xf4, 0x54, 0x3d, 0xae, 0x90,
+    0x51, 0xd1, 0x51, 0xd1, 0x41, 0x26, 0x0a, 0x00,
+    0xc9, 0x58, 0x6c, 0x4e, 0xaa, 0x02, 0x00, 0x00
+};
+
+#endif // __SMALL_IMAGE_FILE_HH__
\ No newline at end of file