13e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik/* 23e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * Copyright (C) 2015 The Android Open Source Project 33e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * 43e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * Licensed under the Apache License, Version 2.0 (the "License"); 53e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * you may not use this file except in compliance with the License. 63e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * You may obtain a copy of the License at 73e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * 83e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * http://www.apache.org/licenses/LICENSE-2.0 93e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * 103e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * Unless required by applicable law or agreed to in writing, software 113e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * distributed under the License is distributed on an "AS IS" BASIS, 123e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * See the License for the specific language governing permissions and 143e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * limitations under the License. 153e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik */ 163e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik 178cf9cb386cd9286d67e879f1ee501ec00d72a4e1Andreas Gampe#include <sstream> 183e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik#include <string> 193e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik#include <vector> 203e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik 213e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik#include <sys/types.h> 223e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik#include <unistd.h> 233e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik 242c30e4a2a2bd73c3e9d327d4b5d059b75cc0f798Andreas Gampe#include "arch/instruction_set.h" 258f4b056427a9d2321e3aa4f21ca8ffb18b3e5ae6David Sehr#include "base/os.h" 268f4b056427a9d2321e3aa4f21ca8ffb18b3e5ae6David Sehr#include "base/utils.h" 273e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik#include "common_runtime_test.h" 282c30e4a2a2bd73c3e9d327d4b5d059b75cc0f798Andreas Gampe#include "exec_utils.h" 292c30e4a2a2bd73c3e9d327d4b5d059b75cc0f798Andreas Gampe#include "gc/heap.h" 302c30e4a2a2bd73c3e9d327d4b5d059b75cc0f798Andreas Gampe#include "gc/space/image_space.h" 313e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik 323e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Biknamespace art { 333e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik 343e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bikclass DexListTest : public CommonRuntimeTest { 353e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik protected: 363e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik virtual void SetUp() { 373e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik CommonRuntimeTest::SetUp(); 383e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik // Dogfood our own lib core dex file. 39121b25e246b7012cfd895f205855c6102da48305Przemyslaw Szczepaniak dex_file_ = GetLibCoreDexFileNames()[0]; 403e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik } 413e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik 423e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik // Runs test with given arguments. 433e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik bool Exec(const std::vector<std::string>& args, std::string* error_msg) { 443e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik std::string file_path = GetTestAndroidRoot(); 45333e7c540cca5290fc06a740ae0031890f6577ccColin Cross file_path += "/bin/dexlist"; 463e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik EXPECT_TRUE(OS::FileExists(file_path.c_str())) << file_path << " should be a valid file path"; 473e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik std::vector<std::string> exec_argv = { file_path }; 483e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik exec_argv.insert(exec_argv.end(), args.begin(), args.end()); 493e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik return ::art::Exec(exec_argv, error_msg); 503e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik } 513e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik 523e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik std::string dex_file_; 533e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik}; 543e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik 553e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik 563e40f4a7289bf0104e061dc36f17a776d4c122d4Aart BikTEST_F(DexListTest, NoInputFileGiven) { 573e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik std::string error_msg; 583e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik ASSERT_FALSE(Exec({}, &error_msg)) << error_msg; 593e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik} 603e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik 613e40f4a7289bf0104e061dc36f17a776d4c122d4Aart BikTEST_F(DexListTest, CantOpenOutput) { 623e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik std::string error_msg; 633e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik ASSERT_FALSE(Exec({"-o", "/joho", dex_file_}, &error_msg)) << error_msg; 643e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik} 653e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik 663e40f4a7289bf0104e061dc36f17a776d4c122d4Aart BikTEST_F(DexListTest, IllFormedMethod) { 673e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik std::string error_msg; 683e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik ASSERT_FALSE(Exec({"-m", "joho", dex_file_}, &error_msg)) << error_msg; 693e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik} 703e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik 713e40f4a7289bf0104e061dc36f17a776d4c122d4Aart BikTEST_F(DexListTest, FullOutput) { 723e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik std::string error_msg; 733e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik ASSERT_TRUE(Exec({"-o", "/dev/null", dex_file_}, &error_msg)) << error_msg; 743e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik} 753e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik 763e40f4a7289bf0104e061dc36f17a776d4c122d4Aart BikTEST_F(DexListTest, MethodOutput) { 773e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik std::string error_msg; 783e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik ASSERT_TRUE(Exec({"-o", "/dev/null", "-m", "java.lang.Object.toString", 793e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik dex_file_}, &error_msg)) << error_msg; 803e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik} 813e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik 823e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik} // namespace art 83