1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
//===- MockGRPCServer.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 "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/CAS/ObjectStore.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/Mutex.h"
#include "llvm/Support/Threading.h"
#include "llvm/Support/thread.h"
#include <condition_variable>
#include <memory>
#include <mutex>
#include <utility>
#include "CASTestConfig.h"
#if LLVM_CAS_ENABLE_REMOTE_CACHE
#include "llvm/RemoteCachingService/LLVMCASCacheProvider.h"
#include "llvm/RemoteCachingService/RemoteCacheProvider.h"
#include "llvm/RemoteCachingService/RemoteCacheServer.h"
using namespace llvm;
using namespace llvm::cas;
namespace {
class MockEnvImpl final : public unittest::cas::MockEnv {
public:
MockEnvImpl(StringRef Socket, StringRef Temp,
std::unique_ptr<ObjectStore> CAS,
std::unique_ptr<ActionCache> Cache);
~MockEnvImpl();
private:
remote::RemoteCacheServer Server;
std::unique_ptr<thread> Thread;
};
} // namespace
MockEnvImpl::MockEnvImpl(StringRef Socket, StringRef Temp,
std::unique_ptr<ObjectStore> CAS,
std::unique_ptr<ActionCache> Cache)
: Server(Socket, remote::createLLVMCASCacheProvider(Temp, std::move(CAS),
std::move(Cache))) {
Server.Start();
auto ServerFunc = [&]() { Server.Listen(); };
Thread = std::make_unique<thread>(ServerFunc);
}
MockEnvImpl::~MockEnvImpl() {
Server.Shutdown();
Thread->join();
}
std::unique_ptr<llvm::unittest::cas::MockEnv> createGRPCEnv(StringRef Socket,
StringRef TempDir) {
auto CAS = createInMemoryCAS();
auto Cache = createInMemoryActionCache();
return std::make_unique<MockEnvImpl>(Socket, TempDir, std::move(CAS),
std::move(Cache));
}
#endif /* LLVM_CAS_ENABLE_REMOTE_CACHE */
|