Skip to content

Commit

Permalink
adds unit tests for feeder and a coresponding workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexandruAntonescuKeysight committed May 27, 2024
1 parent 9e5bcad commit 8e20674
Show file tree
Hide file tree
Showing 4 changed files with 172 additions and 0 deletions.
30 changes: 30 additions & 0 deletions .github/workflows/feeder_tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Feeder tests

on: [ push, pull_request ]

jobs:
feeder-tests:
runs-on: ubuntu-latest

steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Build
run: |
sudo apt update
sudo apt install protobuf-compiler libprotobuf-dev
sudo apt -y install googletest-tools
SCRIPT_DIR=.
BUILD_DIR="${SCRIPT_DIR:?}"/build
CHAKRA_ET_DIR="${SCRIPT_DIR:?}"/schema/protobuf
protoc et_def.proto \
--proto_path="${CHAKRA_ET_DIR:?}" \
--cpp_out="${CHAKRA_ET_DIR:?}"
g++ -Wall -I src/third_party/utils -I schema/protobuf -I src/feeder -c schema/protobuf/et_def.pb.cc -o schema/protobuf/et_def.pb.o
g++ -Wall -I src/third_party/utils -I schema/protobuf -I src/feeder -c src/feeder/et_feeder.cpp -o src/feeder/et_feeder.o
g++ -Wall -I src/third_party/utils -I schema/protobuf -I src/feeder -c src/feeder/et_feeder_node.cpp -o src/feeder/et_feeder_node.o
g++ -Wall -I src/third_party/utils -I schema/protobuf -I src/feeder -c src/third_party/utils/protoio.cc -o src/third_party/utils/protoio.o
g++ -Wall -I src/third_party/utils -I schema/protobuf -I src/feeder -c tests/feeder/tests.cpp -o tests/feeder/tests.o
g++ -Wall -I src/third_party/utils -I schema/protobuf -I src/feeder -o tests schema/protobuf/et_def.pb.o src/feeder/et_feeder.o src/feeder/et_feeder_node.o src/third_party/utils/protoio.o tests/feeder/tests.o -lgtest -lgtest_main -lprotobuf -lpthread
- name: Run tests
run: ./tests
Binary file added tests/data/chakra.0.et
Binary file not shown.
Binary file added tests/data/llama_chakra.3.et
Binary file not shown.
142 changes: 142 additions & 0 deletions tests/feeder/tests.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
#include <gtest/gtest.h>
#include "et_feeder.h"



class ETFeederTest : public ::testing::Test {
protected:
ETFeederTest() {}
virtual ~ETFeederTest() {}

void SetUp(const std::string& filename) {
trace = new Chakra::ETFeeder(filename);
}

virtual void TearDown() {
delete trace;
}

Chakra::ETFeeder* trace;
};

TEST_F(ETFeederTest, ConstructorNodeIDTest) {
SetUp("test/data/chakra.0.et");
std::shared_ptr<Chakra::ETFeederNode> node = trace->getNextIssuableNode();
uint64_t firstNodeID = node->id();
ASSERT_EQ(firstNodeID, 216);

node = trace->getNextIssuableNode();
uint64_t secondNodeID = node->id();
ASSERT_EQ(secondNodeID, 432);
}

TEST_F(ETFeederTest, ConstructorNodeValuesTest) {
SetUp("test/data/chakra.0.et");
std::shared_ptr<Chakra::ETFeederNode> node = trace->getNextIssuableNode();
ChakraProtoMsg::NodeType firstNodeType = node->type();
ASSERT_EQ(firstNodeType, ChakraProtoMsg::COMP_NODE);
ASSERT_TRUE(node->is_cpu_op());

std::string attr = "rf_id";
ChakraProtoMsg::AttributeProto rf_id = node->get_other_attr(attr);
ASSERT_EQ(rf_id.int64_val(), 2);

node = trace->getNextIssuableNode();
uint64_t secondNodeType = node->type();
ASSERT_EQ(secondNodeType, ChakraProtoMsg::COMM_COLL_NODE);
ASSERT_TRUE(node->is_cpu_op());

rf_id = node->get_other_attr(attr);
ASSERT_EQ(rf_id.int64_val(), 110);
}

TEST_F(ETFeederTest, ConstructorETFeederTest) {
SetUp("test/data/chakra.0.et");
std::shared_ptr<Chakra::ETFeederNode> node = trace->getNextIssuableNode();
std::vector<std::shared_ptr<Chakra::ETFeederNode>> children = node->getChildren();
ASSERT_EQ(children[0]->id(), 217);
ASSERT_EQ(children[1]->id(), 430);
ASSERT_EQ(children[2]->id(), 435);
}

TEST_F(ETFeederTest, RemoveTest) {
SetUp("test/data/chakra.0.et");
std::shared_ptr<Chakra::ETFeederNode> node = trace->lookupNode(216);
ASSERT_EQ(node->id(), 216);
trace->removeNode(216);
freopen("/dev/null", "w", stderr);
try
{
node = trace->lookupNode(216);
ASSERT_TRUE(false) << "node should be removed \n";
}
catch(const std::exception& e)
{
//this is the desired behaviour
}
freopen("/dev/tty", "w", stderr);
}

TEST_F(ETFeederTest, RemoveAndGetNextTest) {
SetUp("tests/data/llama_chakra.3.et");
std::shared_ptr<Chakra::ETFeederNode> node = trace->lookupNode(5);
ASSERT_EQ(node->id(), 5);
trace->removeNode(5);
node = trace->getNextIssuableNode();
ASSERT_EQ(node->id(), 5);
}

TEST_F(ETFeederTest, FreeChildrenTest) {
SetUp("test/data/chakra.0.et");
std::shared_ptr<Chakra::ETFeederNode> node = trace->lookupNode(216);
ASSERT_EQ(node->id(), 216);
trace->freeChildrenNodes(216);
node = trace->getNextIssuableNode();
ASSERT_EQ(node->id(), 216);
node = trace->getNextIssuableNode();
ASSERT_EQ(node->id(), 217);
}

TEST_F(ETFeederTest, HasNodesToIssueTest) {
SetUp("tests/data/llama_chakra.3.et");
std::shared_ptr<Chakra::ETFeederNode> node = trace->getNextIssuableNode();
ASSERT_EQ(node->id(), 5);
ASSERT_TRUE(trace->hasNodesToIssue());
trace->removeNode(5);
ASSERT_TRUE(trace->hasNodesToIssue());
}

TEST_F(ETFeederTest, PushBackIssuableNodeTest) {
SetUp("test/data/chakra.0.et");
std::shared_ptr<Chakra::ETFeederNode> node;
trace->pushBackIssuableNode(217);
node = trace->getNextIssuableNode();
ASSERT_EQ(node->id(), 216);
node = trace->getNextIssuableNode();
ASSERT_EQ(node->id(), 217);
}

TEST_F(ETFeederTest, AddNodeTest) {
SetUp("test/data/chakra.0.et");
std::shared_ptr<Chakra::ETFeederNode> node;
node = trace->lookupNode(216);
trace->removeNode(216);
trace->addNode(node);
std::shared_ptr<Chakra::ETFeederNode> node2;
node2 = trace->lookupNode(216);
ASSERT_EQ(node2->id(), 216);
}

TEST_F(ETFeederTest, NodeGetChildrenTest) {
SetUp("test/data/chakra.0.et");
std::shared_ptr<Chakra::ETFeederNode> node;
node = trace->lookupNode(216);
std::vector<std::shared_ptr<Chakra::ETFeederNode>> children = node->getChildren();
ASSERT_EQ(children[0]->id(), 217);
ASSERT_EQ(children[2]->id(), 435);
}

int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

0 comments on commit 8e20674

Please sign in to comment.