Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
The next day sonar commit
[simgrid.git] / src / surf / SplitDuplexLinkImpl_test.cpp
1 /* Copyright (c) 2017-2021. The SimGrid Team. All rights reserved.               */
2
3 /* This program is free software; you can redistribute it and/or modify it
4  * under the terms of the license (GNU LGPL) which comes with this package. */
5
6 #include "catch.hpp"
7
8 #include "simgrid/s4u/Engine.hpp"
9 #include "simgrid/s4u/Link.hpp"
10 #include "src/surf/SplitDuplexLinkImpl.hpp"
11
12 TEST_CASE("SplitDuplexLink: create", "")
13 {
14   simgrid::s4u::Engine e("test");
15   auto* zone = simgrid::s4u::create_star_zone("test");
16
17   SECTION("create string")
18   {
19     simgrid::s4u::Link* link_up;
20     simgrid::s4u::Link* link_down;
21     simgrid::s4u::SplitDuplexLink* link;
22     REQUIRE_NOTHROW(link = zone->create_split_duplex_link("link", "100GBps"));
23     REQUIRE(simgrid::s4u::SplitDuplexLink::by_name("link") == link);
24     REQUIRE_NOTHROW(link_up = simgrid::s4u::Link::by_name("link_UP"));
25     REQUIRE_NOTHROW(link_down = simgrid::s4u::Link::by_name("link_DOWN"));
26     REQUIRE(link_up->get_bandwidth() == 100e9);
27     REQUIRE(link_down->get_bandwidth() == 100e9);
28     REQUIRE(link_up == link->get_link_up());
29     REQUIRE(link_down == link->get_link_down());
30   }
31
32   SECTION("create double") { REQUIRE_NOTHROW(zone->create_split_duplex_link("link", 10e6)); }
33 }
34
35 TEST_CASE("SplitDuplexLink: sets", "")
36 {
37   simgrid::s4u::Engine e("test");
38   auto* zone            = simgrid::s4u::create_star_zone("test");
39   auto* link            = zone->create_split_duplex_link("link", 100e6);
40   auto const* link_up   = link->get_link_up();
41   auto const* link_down = link->get_link_down();
42
43   SECTION("bandwidth")
44   {
45     double bw = 1e3;
46     link->set_bandwidth(bw);
47     REQUIRE(link_up->get_bandwidth() == bw);
48     REQUIRE(link_down->get_bandwidth() == bw);
49   }
50
51   SECTION("latency")
52   {
53     double lat = 1e-9;
54     link->set_latency(lat);
55     REQUIRE(link_up->get_latency() == lat);
56     REQUIRE(link_down->get_latency() == lat);
57   }
58
59   SECTION("turn on/off")
60   {
61     link->turn_off();
62     REQUIRE(not link_up->is_on());
63     REQUIRE(not link_down->is_on());
64     link->turn_on();
65     REQUIRE(link_up->is_on());
66     REQUIRE(link_down->is_on());
67   }
68
69   SECTION("concurrency_limit")
70   {
71     link->set_concurrency_limit(3);
72     REQUIRE(link_up->get_impl()->get_constraint()->get_concurrency_limit() == 3);
73     REQUIRE(link_down->get_impl()->get_constraint()->get_concurrency_limit() == 3);
74   }
75
76   SECTION("sharing_policy: invalid")
77   {
78     REQUIRE_THROWS_AS(link->set_sharing_policy(simgrid::s4u::Link::SharingPolicy::WIFI), std::invalid_argument);
79     REQUIRE_THROWS_AS(link->set_sharing_policy(simgrid::s4u::Link::SharingPolicy::SPLITDUPLEX), std::invalid_argument);
80   }
81
82   SECTION("sharing_policy: fatpipe/shared")
83   {
84     for (const auto& policy : {simgrid::s4u::Link::SharingPolicy::FATPIPE, simgrid::s4u::Link::SharingPolicy::SHARED}) {
85       link->set_sharing_policy(policy);
86       REQUIRE(link_up->get_sharing_policy() == policy);
87       REQUIRE(link_down->get_sharing_policy() == policy);
88     }
89   }
90
91   SECTION("sharing_policy: nonlinear")
92   {
93     link->set_sharing_policy(simgrid::s4u::Link::SharingPolicy::NONLINEAR,
94                              [](double c, int /*n*/) -> double { return c; });
95     REQUIRE(link_up->get_sharing_policy() == simgrid::s4u::Link::SharingPolicy::NONLINEAR);
96     REQUIRE(link_down->get_sharing_policy() == simgrid::s4u::Link::SharingPolicy::NONLINEAR);
97   }
98 }