summaryrefslogtreecommitdiff
path: root/mblock/src/lib/qa_mblock_send.cc
diff options
context:
space:
mode:
Diffstat (limited to 'mblock/src/lib/qa_mblock_send.cc')
-rw-r--r--mblock/src/lib/qa_mblock_send.cc477
1 files changed, 0 insertions, 477 deletions
diff --git a/mblock/src/lib/qa_mblock_send.cc b/mblock/src/lib/qa_mblock_send.cc
deleted file mode 100644
index 53f93927b5..0000000000
--- a/mblock/src/lib/qa_mblock_send.cc
+++ /dev/null
@@ -1,477 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2006,2007,2008 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <qa_mblock_send.h>
-#include <cppunit/TestAssert.h>
-#include <mblock/mblock.h>
-#include <mblock/runtime.h>
-#include <mb_runtime_nop.h> // QA only
-#include <mblock/protocol_class.h>
-#include <mblock/exception.h>
-#include <mblock/msg_queue.h>
-#include <mblock/message.h>
-#include <mb_mblock_impl.h>
-#include <mblock/msg_accepter.h>
-#include <mblock/class_registry.h>
-#include <stdio.h>
-
-using namespace pmt;
-
-static pmt_t s_data = pmt_intern("data");
-static pmt_t s_status = pmt_intern("status");
-static pmt_t s_control = pmt_intern("control");
-static pmt_t s_p0 = pmt_intern("p0");
-static pmt_t s_p1 = pmt_intern("p1");
-static pmt_t s_p2 = pmt_intern("p2");
-static pmt_t s_p3 = pmt_intern("p3");
-static pmt_t s_e1 = pmt_intern("e1");
-static pmt_t s_r1 = pmt_intern("r1");
-
-static void
-define_protocol_classes()
-{
- // Defined from client point-of-view.
- mb_make_protocol_class(pmt_intern("qa-send-cs"), // name
- pmt_list1(s_status), // incoming
- pmt_list1(s_control)); // outgoing
-
-}
-
-mb_mblock_sptr
-get_top(mb_runtime_sptr rts)
-{
- return dynamic_cast<mb_runtime_nop *>(rts.get())->top();
-}
-
-// ================================================================
-// test_simple_routing
-// ================================================================
-
-// sub-block for test_simple_routing
-
-class sr1 : public mb_mblock
-{
- mb_port_sptr d_p1;
- mb_port_sptr d_p2;
- mb_port_sptr d_p3;
-
-public:
- sr1(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg);
- ~sr1();
- void initial_transition();
-};
-
-sr1::sr1(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg)
- : mb_mblock(runtime, instance_name, user_arg)
-{
- d_p1 = define_port("p1", "qa-send-cs", true, mb_port::EXTERNAL);
- d_p2 = define_port("p2", "qa-send-cs", true, mb_port::EXTERNAL);
- d_p3 = define_port("p3", "qa-send-cs", false, mb_port::EXTERNAL);
-}
-
-sr1::~sr1(){}
-
-void
-sr1::initial_transition()
-{
- // std::cout << instance_name() << "[sr1]: initial_transition\n";
-
- // send two messages to each port
- pmt_t our_name = pmt_intern(instance_name());
- d_p1->send(s_status, pmt_list3(our_name, s_p1, pmt_from_long(0)));
- d_p1->send(s_status, pmt_list3(our_name, s_p1, pmt_from_long(1)));
-
- d_p2->send(s_status, pmt_list3(our_name, s_p2, pmt_from_long(0)));
- d_p2->send(s_status, pmt_list3(our_name, s_p2, pmt_from_long(1)));
-}
-
-REGISTER_MBLOCK_CLASS(sr1);
-
-// ----------------------------------------------------------------
-
-// top-level container block for test_simple_routing
-class sr0 : public mb_mblock
-{
- mb_port_sptr d_p0;
-
-public:
- sr0(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg);
- ~sr0();
- void initial_transition();
-};
-
-sr0::sr0(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg)
- : mb_mblock(runtime, instance_name, user_arg)
-{
- d_p0 = define_port("p0", "qa-send-cs", false, mb_port::INTERNAL);
-
- define_component("mb1", "sr1");
- define_component("mb2", "sr1");
-
- connect("self", "p0", "mb1", "p1");
- connect("mb1", "p2", "mb2", "p3");
- connect("mb1", "p3", "mb2", "p2");
-}
-
-sr0::~sr0(){}
-
-void
-sr0::initial_transition()
-{
- // std::cout << instance_name() << "[sr0]: initial_transition\n";
-
- // send two messages to p0
- pmt_t our_name = pmt_intern(instance_name());
- d_p0->send(s_control, pmt_list3(our_name, s_p0, pmt_from_long(0)));
- d_p0->send(s_control, pmt_list3(our_name, s_p0, pmt_from_long(1)));
-}
-
-REGISTER_MBLOCK_CLASS(sr0);
-
-// ----------------------------------------------------------------
-
-/*
- * This tests basic message routing using INTERNAL and EXTERNAL ports.
- * It does not rely on the guts of the runtime being complete,
- * which is good, because at the time this is being written, it isn't.
- */
-void
-qa_mblock_send::test_simple_routing()
-{
- define_protocol_classes();
-
- mb_message_sptr msg;
-
- mb_runtime_sptr rt = mb_make_runtime_nop();
- rt->run("top", "sr0", PMT_F);
-
- mb_mblock_sptr mb0 = get_top(rt);
-
- // Reach into the guts and see if the messages ended up where they should have
-
- // mb0 should have received two messages sent from mb1 via its p1
- msg = mb0->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- // std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p0, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb1"), s_p1, pmt_from_long(0)),
- msg->data()));
-
- msg = mb0->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- // std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p0, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb1"), s_p1, pmt_from_long(1)),
- msg->data()));
-
- // mb1 should have received
- // two messages from mb0 via its p0 and
- // two messages from mb2 via its p3
-
- mb_mblock_sptr mb1 = mb0->impl()->component("mb1");
-
- msg = mb1->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- // std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p1, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top"), s_p0, pmt_from_long(0)),
- msg->data()));
-
- msg = mb1->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- // std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p1, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top"), s_p0, pmt_from_long(1)),
- msg->data()));
-
- msg = mb1->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- // std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p3, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb2"), s_p2, pmt_from_long(0)),
- msg->data()));
-
- msg = mb1->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- // std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p3, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb2"), s_p2, pmt_from_long(1)),
- msg->data()));
-
-
- // mb2 should have received
- // two messages from mb2 via its p2
-
- mb_mblock_sptr mb2 = mb0->impl()->component("mb2");
-
- msg = mb2->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- // std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p3, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb1"), s_p2, pmt_from_long(0)),
- msg->data()));
-
- msg = mb2->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- // std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p3, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb1"), s_p2, pmt_from_long(1)),
- msg->data()));
-}
-
-// ================================================================
-// test_relay_routing_1
-// ================================================================
-
-// internal block for test_relay_routing
-
-class rr2 : public mb_mblock
-{
- mb_port_sptr d_p1;
- mb_port_sptr d_p2;
-
-public:
- rr2(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg);
- ~rr2();
- void initial_transition();
-};
-
-rr2::rr2(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg)
- : mb_mblock(runtime, instance_name, user_arg)
-{
- d_p1 = define_port("p1", "qa-send-cs", true, mb_port::EXTERNAL);
- d_p2 = define_port("p2", "qa-send-cs", false, mb_port::EXTERNAL);
-}
-
-rr2::~rr2(){}
-
-void
-rr2::initial_transition()
-{
- // std::cout << instance_name() << "[rr2]: initial_transition\n";
-
- // send two messages via p1
- pmt_t our_name = pmt_intern(instance_name());
- d_p1->send(s_status, pmt_list3(our_name, s_p1, pmt_from_long(0)));
- d_p1->send(s_status, pmt_list3(our_name, s_p1, pmt_from_long(1)));
-}
-
-REGISTER_MBLOCK_CLASS(rr2);
-
-// ----------------------------------------------------------------
-
-// intermediate block for test_relay_routing
-
-class rr1 : public mb_mblock
-{
- mb_port_sptr d_p1;
- mb_port_sptr d_p2;
-
-public:
- rr1(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg);
- ~rr1();
-};
-
-rr1::rr1(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg)
- : mb_mblock(runtime, instance_name, user_arg)
-{
- d_p1 = define_port("p1", "qa-send-cs", true, mb_port::RELAY);
- d_p2 = define_port("p2", "qa-send-cs", false, mb_port::RELAY);
-
- define_component("c0", "rr2");
-
- connect("self", "p1", "c0", "p1");
- connect("self", "p2", "c0", "p2");
-}
-
-rr1::~rr1(){}
-
-REGISTER_MBLOCK_CLASS(rr1);
-
-// ----------------------------------------------------------------
-
-// top-level container for test_relay_routing
-
-class rr0_a : public mb_mblock
-{
-public:
- rr0_a(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg);
- ~rr0_a();
-};
-
-rr0_a::rr0_a(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg)
- : mb_mblock(runtime, instance_name, user_arg)
-{
- define_component("c0", "rr1");
- define_component("c1", "rr2");
-
- connect("c0", "p1", "c1", "p2");
- connect("c0", "p2", "c1", "p1");
-}
-
-rr0_a::~rr0_a(){}
-
-REGISTER_MBLOCK_CLASS(rr0_a);
-
-/*
- * This tests basic message routing using RELAY and EXTERNAL ports.
- * It does not rely on the guts of the runtime being complete,
- * which is good, because at the time this is being written, it isn't.
- */
-void
-qa_mblock_send::test_relay_routing_1()
-{
- mb_message_sptr msg;
-
- mb_runtime_sptr rt = mb_make_runtime_nop();
- rt->run("top", "rr0_a", PMT_F);
- mb_mblock_sptr top = get_top(rt);
-
- // Reach into the guts and see if the messages ended up where they should have
-
- mb_mblock_sptr c0 = top->impl()->component("c0");
- mb_mblock_sptr c0c0 = c0->impl()->component("c0");
-
- mb_mblock_sptr c1 = top->impl()->component("c1");
-
- // c0c0 should have received
- // two message from c1 via its p2
-
- msg = c0c0->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- //std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c1"), s_p1, pmt_from_long(0)),
- msg->data()));
-
- msg = c0c0->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- //std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c1"), s_p1, pmt_from_long(1)),
- msg->data()));
-
- // c1 should have received
- // two message from c0c0 via its p2
-
- msg = c1->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- //std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c0/c0"), s_p1, pmt_from_long(0)),
- msg->data()));
-
- msg = c1->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- //std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c0/c0"), s_p1, pmt_from_long(1)),
- msg->data()));
-}
-
-// ================================================================
-// test_relay_routing_2
-// ================================================================
-
-// top-level container for test_relay_routing_2
-
-class rr0_b : public mb_mblock
-{
-public:
- rr0_b(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg);
- ~rr0_b();
-};
-
-rr0_b::rr0_b(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg)
- : mb_mblock(runtime, instance_name, user_arg)
-{
- define_component("c0", "rr1");
- define_component("c1", "rr1");
-
- connect("c0", "p1", "c1", "p2");
- connect("c0", "p2", "c1", "p1");
-}
-
-rr0_b::~rr0_b(){}
-
-REGISTER_MBLOCK_CLASS(rr0_b);
-
-/*
- * This tests basic message routing using RELAY and EXTERNAL ports.
- * It does not rely on the guts of the runtime being complete,
- * which is good, because at the time this is being written, it isn't.
- */
-void
-qa_mblock_send::test_relay_routing_2()
-{
- mb_message_sptr msg;
-
- mb_runtime_sptr rt = mb_make_runtime_nop();
- rt->run("top", "rr0_b", PMT_F);
- mb_mblock_sptr top = get_top(rt);
-
- // Reach into the guts and see if the messages ended up where they should have
-
- mb_mblock_sptr c0 = top->impl()->component("c0");
- mb_mblock_sptr c0c0 = c0->impl()->component("c0");
-
- mb_mblock_sptr c1 = top->impl()->component("c1");
- mb_mblock_sptr c1c0 = c1->impl()->component("c0");
-
- // c0c0 should have received
- // two message from c1c0 via its p2
-
- msg = c0c0->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- // std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c1/c0"), s_p1, pmt_from_long(0)),
- msg->data()));
-
- msg = c0c0->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- // std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c1/c0"), s_p1, pmt_from_long(1)),
- msg->data()));
-
- // c1c0 should have received
- // two message from c0c0 via its p2
-
- msg = c1c0->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- // std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c0/c0"), s_p1, pmt_from_long(0)),
- msg->data()));
-
- msg = c1c0->impl()->msgq().get_highest_pri_msg_nowait();
- CPPUNIT_ASSERT(msg);
- // std::cerr << msg->data() << std::endl;
- CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id());
- CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c0/c0"), s_p1, pmt_from_long(1)),
- msg->data()));
-}