1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "crazy_linker_system.h" 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <minitest/minitest.h> 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <stdlib.h> 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "crazy_linker_system_mock.h" 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace crazy { 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST(System, SingleFile) { 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static const char kPath[] = "/tmp/foo/bar"; 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static const char kString[] = "Hello World"; 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const size_t kStringLen = sizeof(kString) - 1; 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SystemMock sys; 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sys.AddRegularFile(kPath, kString, kStringLen); 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) char buff2[kStringLen + 10]; 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FileDescriptor fd(kPath); 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(kStringLen, fd.Read(buff2, sizeof(buff2))); 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) buff2[kStringLen] = '\0'; 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_STREQ(kString, buff2); 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST(System, PathExists) { 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SystemMock sys; 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sys.AddRegularFile("/tmp/foo", "FOO", 3); 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(PathExists("/tmp/foo")); 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST(System, PathExistsWithBadPath) { 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SystemMock sys; 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(PathExists("/tmp/foo")); 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST(System, IsSystemLibrary) { 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SystemMock sys; 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static const struct { 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const char* name; 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool success; 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } kData[] = { 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"libEGL.so", true}, 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"libGLESv1_CM.so", true}, 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"libGLESv1.so", false}, 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"libGLESv2.so", true}, 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"libOpenMAXAL.so", true}, 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"libOpenSLES.so", true}, 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"libandroid.so", true}, 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"libc.so", true}, 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"libdl.so", true}, 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"libjnigraphics.so", true}, 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"libm.so", true}, 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"libstdc++.so", true}, 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"libstlport.so", false}, 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"libz.so", true}, 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"/system/lib/libc.so", true}, 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) {"/system/libc.so/libfoo.so", false}, 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }; 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (size_t n = 0; n < ARRAY_LEN(kData); ++n) { 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TEST_TEXT << "Checking " << kData[n].name; 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(kData[n].success, IsSystemLibrary(kData[n].name)); 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace crazy 72