mirror of
https://github.com/microsoft/mscclpp.git
synced 2026-05-12 09:17:06 +00:00
This PR implements and closes #137. The new `Endpoint` and `Context` classes expose the connection establishing functionality from `Communicator`, which now is only responsible for tying together the bootstrapper with a context. The largest breaking change here is that `Communicator.connectOnSetup(...)` now returns the `Connection` wrapped inside a `NonblockingFuture`. This is because with the way `Context` is implemented a `Connection` is now fully initialized on construction. Some smaller breaking API changes from this change are that `RegisteredMemory` no longer has a `rank()` function (as there maybe no concept of rank), and similarly `Connection` has no `remoteRank()` and `tag()` functions. The latter are replaced by `remoteRankOf` and `tagOf` functions in `Communicator`. A new `EndpointConfig` class is introduced to avoid duplication of the IB configuration parameters in the APIs of `Context` and `Communicator`. The usual usage pattern of just passing in a `Transport` still works due to an implicit conversion into `EndpointConfig`. Miscellaneous changes: -Cleans up how the PIMPL pattern is applied by making both the `Impl` struct and the `pimpl_` pointers private for all relevant classes in the core API. -Enables ctest to be run from the build root directory.
54 lines
1.8 KiB
C++
54 lines
1.8 KiB
C++
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
|
|
#include <gmock/gmock.h>
|
|
#include <gtest/gtest.h>
|
|
|
|
#include <mscclpp/core.hpp>
|
|
|
|
class LocalCommunicatorTest : public ::testing::Test {
|
|
protected:
|
|
void SetUp() override {
|
|
bootstrap = std::make_shared<mscclpp::TcpBootstrap>(0, 1);
|
|
bootstrap->initialize(bootstrap->createUniqueId());
|
|
comm = std::make_shared<mscclpp::Communicator>(bootstrap);
|
|
}
|
|
|
|
std::shared_ptr<mscclpp::TcpBootstrap> bootstrap;
|
|
std::shared_ptr<mscclpp::Communicator> comm;
|
|
};
|
|
|
|
class MockSetuppable : public mscclpp::Setuppable {
|
|
public:
|
|
MOCK_METHOD(void, beginSetup, (std::shared_ptr<mscclpp::Bootstrap> bootstrap), (override));
|
|
MOCK_METHOD(void, endSetup, (std::shared_ptr<mscclpp::Bootstrap> bootstrap), (override));
|
|
};
|
|
|
|
TEST_F(LocalCommunicatorTest, OnSetup) {
|
|
auto mockSetuppable = std::make_shared<MockSetuppable>();
|
|
comm->onSetup(mockSetuppable);
|
|
EXPECT_CALL(*mockSetuppable, beginSetup(std::dynamic_pointer_cast<mscclpp::Bootstrap>(bootstrap)));
|
|
EXPECT_CALL(*mockSetuppable, endSetup(std::dynamic_pointer_cast<mscclpp::Bootstrap>(bootstrap)));
|
|
comm->setup();
|
|
}
|
|
|
|
TEST_F(LocalCommunicatorTest, RegisterMemory) {
|
|
int dummy[42];
|
|
auto memory = comm->registerMemory(&dummy, sizeof(dummy), mscclpp::NoTransports);
|
|
EXPECT_EQ(memory.data(), &dummy);
|
|
EXPECT_EQ(memory.size(), sizeof(dummy));
|
|
EXPECT_EQ(memory.transports(), mscclpp::NoTransports);
|
|
}
|
|
|
|
TEST_F(LocalCommunicatorTest, SendMemoryToSelf) {
|
|
int dummy[42];
|
|
auto memory = comm->registerMemory(&dummy, sizeof(dummy), mscclpp::NoTransports);
|
|
comm->sendMemoryOnSetup(memory, 0, 0);
|
|
auto memoryFuture = comm->recvMemoryOnSetup(0, 0);
|
|
comm->setup();
|
|
auto sameMemory = memoryFuture.get();
|
|
EXPECT_EQ(sameMemory.data(), memory.data());
|
|
EXPECT_EQ(sameMemory.size(), memory.size());
|
|
EXPECT_EQ(sameMemory.transports(), memory.transports());
|
|
}
|