78 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
//===-- LLGSTest.cpp ------------------------------------------------------===//
 | 
						|
//
 | 
						|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | 
						|
// See https://llvm.org/LICENSE.txt for license information.
 | 
						|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#include "TestBase.h"
 | 
						|
#include "lldb/Host/Host.h"
 | 
						|
#include "llvm/Testing/Support/Error.h"
 | 
						|
 | 
						|
using namespace llgs_tests;
 | 
						|
using namespace lldb_private;
 | 
						|
using namespace llvm;
 | 
						|
 | 
						|
#ifdef SendMessage
 | 
						|
#undef SendMessage
 | 
						|
#endif
 | 
						|
 | 
						|
// Disable this test on Windows as it appears to have a race condition
 | 
						|
// that causes lldb-server not to exit after the inferior hangs up.
 | 
						|
#if !defined(_WIN32)
 | 
						|
TEST_F(TestBase, LaunchModePreservesEnvironment) {
 | 
						|
  putenv(const_cast<char *>("LLDB_TEST_MAGIC_VARIABLE=LLDB_TEST_MAGIC_VALUE"));
 | 
						|
 | 
						|
  auto ClientOr = TestClient::launch(getLogFileName(),
 | 
						|
                                     {getInferiorPath("environment_check")});
 | 
						|
  ASSERT_THAT_EXPECTED(ClientOr, Succeeded());
 | 
						|
  auto &Client = **ClientOr;
 | 
						|
 | 
						|
  ASSERT_THAT_ERROR(Client.ContinueAll(), Succeeded());
 | 
						|
  ASSERT_THAT_EXPECTED(
 | 
						|
      Client.GetLatestStopReplyAs<StopReplyExit>(),
 | 
						|
      HasValue(testing::Property(&StopReply::getKind,
 | 
						|
                                 WaitStatus{WaitStatus::Exit, 0})));
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
TEST_F(TestBase, DS_TEST(DebugserverEnv)) {
 | 
						|
  // Test that --env takes precedence over inherited environment variables.
 | 
						|
  putenv(const_cast<char *>("LLDB_TEST_MAGIC_VARIABLE=foobar"));
 | 
						|
 | 
						|
  auto ClientOr = TestClient::launchCustom(getLogFileName(),
 | 
						|
      { "--env", "LLDB_TEST_MAGIC_VARIABLE=LLDB_TEST_MAGIC_VALUE" },
 | 
						|
                                     {getInferiorPath("environment_check")});
 | 
						|
  ASSERT_THAT_EXPECTED(ClientOr, Succeeded());
 | 
						|
  auto &Client = **ClientOr;
 | 
						|
 | 
						|
  ASSERT_THAT_ERROR(Client.ContinueAll(), Succeeded());
 | 
						|
  ASSERT_THAT_EXPECTED(
 | 
						|
      Client.GetLatestStopReplyAs<StopReplyExit>(),
 | 
						|
      HasValue(testing::Property(&StopReply::getKind,
 | 
						|
                                 WaitStatus{WaitStatus::Exit, 0})));
 | 
						|
}
 | 
						|
 | 
						|
TEST_F(TestBase, LLGS_TEST(vAttachRichError)) {
 | 
						|
  auto ClientOr = TestClient::launch(getLogFileName(),
 | 
						|
                                     {getInferiorPath("environment_check")});
 | 
						|
  ASSERT_THAT_EXPECTED(ClientOr, Succeeded());
 | 
						|
  auto &Client = **ClientOr;
 | 
						|
 | 
						|
  // Until we enable error strings we should just get the error code.
 | 
						|
  ASSERT_THAT_ERROR(Client.SendMessage("vAttach;1"),
 | 
						|
                    Failed<ErrorInfoBase>(testing::Property(
 | 
						|
                        &ErrorInfoBase::message, "Error 255")));
 | 
						|
 | 
						|
  ASSERT_THAT_ERROR(Client.SendMessage("QEnableErrorStrings"), Succeeded());
 | 
						|
 | 
						|
  // Now, we expect the full error message.
 | 
						|
  ASSERT_THAT_ERROR(
 | 
						|
      Client.SendMessage("vAttach;1"),
 | 
						|
      Failed<ErrorInfoBase>(testing::Property(
 | 
						|
          &ErrorInfoBase::message,
 | 
						|
          testing::StartsWith(
 | 
						|
              "cannot attach to process 1 when another process with pid"))));
 | 
						|
}
 |