test,base: Added GTest for base/loader/image_file_data.cc
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>
This commit is contained in:
@@ -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')
|
||||
|
||||
110
src/base/loader/image_file_data.test.cc
Normal file
110
src/base/loader/image_file_data.test.cc
Normal file
@@ -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);
|
||||
}
|
||||
141
src/base/loader/small_image_file.test.hh
Normal file
141
src/base/loader/small_image_file.test.hh
Normal file
@@ -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__
|
||||
Reference in New Issue
Block a user