def test_15_add_ebgp_peer(self): q4 = QuaggaBGPContainer(name='q4', asn=65001, router_id='192.168.0.5') self.quaggas['q4'] = q4 initial_wait_time = q4.run() time.sleep(initial_wait_time) self.gobgp.add_peer(q4) q4.add_peer(self.gobgp) prefix = '10.0.4.0/24' q4.add_route(prefix) self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q4) q1 = self.quaggas['q1'] q2 = self.quaggas['q2'] for q in [q1, q2]: def _f(): return prefix in [ p['nlri']['prefix'] for p in self.gobgp.get_adj_rib_out(q) ] wait_for_completion(_f) def f(): return len(q2.get_global_rib(prefix)) == 1 wait_for_completion(f)
def _wait_for_boot(self): for daemon in self._get_enabled_quagga_daemons(): def _f_quagga(): ret = self.local("vtysh -d {0} -c 'show run' > /dev/null 2>&1; echo $?".format(daemon), capture=True) return ret == '0' wait_for_completion(_f_quagga) wait_for_completion(self._is_running)
def test_04_softreset_in(self): self.g3.softreset(self.g1) wait_for_completion(lambda: len(self.g3.get_global_rib()) == 0) wait_for_completion( lambda: len(self.g3.get_global_rib(rf="vpnv4")) == 2) wait_for_completion(lambda: len(self.g2.get_global_rib()) == 1) wait_for_completion(lambda: len(self.g5.get_global_rib()) == 1)
def test_05_softreset_out(self): self.g3.softreset(self.g2, type='out') wait_for_completion(lambda: len(self.g3.get_global_rib()) == 0) wait_for_completion( lambda: len(self.g3.get_global_rib(rf="vpnv4")) == 2) wait_for_completion(lambda: len(self.g2.get_global_rib()) == 1) wait_for_completion(lambda: len(self.g5.get_global_rib()) == 1)
def _wait_for_boot(self): def _f(): ret = self.local('exabgpcli version > /dev/null 2>&1; echo $?', capture=True) return ret == '0' return wait_for_completion(_f)
def _wait_for_boot(self): def _f(): ret = self.local('birdc show status > /dev/null 2>&1; echo $?', capture=True) return ret == '0' return wait_for_completion(_f)
def test_06_graceful_restart(self): self.g1.graceful_restart() self.g3.wait_for(expected_state=BGP_FSM_ACTIVE, peer=self.g1) wait_for_completion(lambda: len(self.g3.get_global_rib(rf="vpnv4")) == 2) wait_for_completion(lambda: len(self.g2.get_global_rib()) == 1) wait_for_completion(lambda: len(self.g3.get_global_rib(rf="vpnv4")) == 1) wait_for_completion(lambda: len(self.g2.get_global_rib()) == 0)
def test_06_graceful_restart(self): self.g1.stop_gobgp() self.g3.wait_for(expected_state=BGP_FSM_ACTIVE, peer=self.g1) wait_for_completion(lambda: len(self.g3.get_global_rib(rf="vpnv4")) == 2) wait_for_completion(lambda: len(self.g2.get_global_rib()) == 1) wait_for_completion(lambda: len(self.g3.get_global_rib(rf="vpnv4")) == 1) wait_for_completion(lambda: len(self.g2.get_global_rib()) == 0)
def test_16_add_best_path_from_ibgp(self): q1 = self.quaggas['q1'] q2 = self.quaggas['q2'] prefix = '10.0.4.0/24' q1.add_route(prefix) def f1(): l = self.gobgp.get_global_rib(prefix) return len(l) == 1 and len(l[0]['paths']) == 2 wait_for_completion(f1) def f2(): return prefix not in [ p['nlri']['prefix'] for p in self.gobgp.get_adj_rib_out(q2) ] wait_for_completion(f2) def f3(): l = q2.get_global_rib(prefix) # route from ibgp so aspath should be empty return len(l) == 1 and len(l[0]['aspath']) == 0 wait_for_completion(f3)
def test_03_disable(self): self.g3.disable_peer(self.g1) wait_for_completion(lambda: len(self.g3.get_global_rib(rf="vpnv4")) == 1) wait_for_completion(lambda: len(self.g2.get_global_rib()) == 0) wait_for_completion(lambda: len(self.g5.get_global_rib()) == 1) self.g3.enable_peer(self.g1) self.g3.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=self.g1)
def test_02_add_routes(self): self.g1.local("gobgp global rib add 10.0.0.0/24") self.g4.local("gobgp global rib add 10.0.0.0/24") wait_for_completion( lambda: len(self.g3.get_global_rib(rf="vpnv4")) == 2) wait_for_completion(lambda: len(self.g2.get_global_rib()) == 1) wait_for_completion(lambda: len(self.g5.get_global_rib()) == 1)
def test_15_add_ebgp_peer(self): q4 = QuaggaBGPContainer(name='q4', asn=65001, router_id='192.168.0.5') self.quaggas['q4'] = q4 initial_wait_time = q4.run() time.sleep(initial_wait_time) self.gobgp.add_peer(q4) q4.add_peer(self.gobgp) prefix = '10.0.4.0/24' q4.add_route(prefix) self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q4) q1 = self.quaggas['q1'] q2 = self.quaggas['q2'] for q in [q1, q2]: def _f(): return prefix in [p['nlri']['prefix'] for p in self.gobgp.get_adj_rib_out(q)] wait_for_completion(_f) def f(): return len(q2.get_global_rib(prefix)) == 1 wait_for_completion(f)
def test_20_check_withdrawal_2(self): g1 = self.gobgp g2 = self.quaggas['g2'] prefix = '40.10.0.0/24' g1.add_route(prefix) wait_for_completion(lambda: len(g1.get_global_rib(prefix)) == 1) wait_for_completion(lambda: len(g2.get_global_rib(prefix)) == 1) r = g2.local('gobgp monitor global rib -j', stream=True, tty=False) g1.local('gobgp global rib del 40.10.0.0/24') del g1.routes[prefix] wait_for_completion(lambda: len(g1.get_global_rib(prefix)) == 0) wait_for_completion(lambda: len(g2.get_global_rib(prefix)) == 0) ret = json.loads(r.next()) self.assertTrue(ret[0]['nlri']['prefix'] == prefix) self.assertTrue('withdrawal' in ret[0])
def test_21_check_withdrawal_2(self): g1 = self.gobgp g2 = self.quaggas['g2'] prefix = '40.10.0.0/24' g1.add_route(prefix) wait_for_completion(lambda: len(g1.get_global_rib(prefix)) == 1) wait_for_completion(lambda: len(g2.get_global_rib(prefix)) == 1) r = g2.local('gobgp monitor global rib -j', stream=True, tty=False) g1.local('gobgp global rib del 40.10.0.0/24') del g1.routes[prefix] wait_for_completion(lambda: len(g1.get_global_rib(prefix)) == 0) wait_for_completion(lambda: len(g2.get_global_rib(prefix)) == 0) ret = json.loads(r.next()) self.assertTrue(ret[0]['nlri']['prefix'] == prefix) self.assertTrue('withdrawal' in ret[0])
def test_16_add_best_path_from_ibgp(self): q1 = self.quaggas['q1'] q2 = self.quaggas['q2'] prefix = '10.0.4.0/24' q1.add_route(prefix) def f1(): l = self.gobgp.get_global_rib(prefix) return len(l) == 1 and len(l[0]['paths']) == 2 wait_for_completion(f1) def f2(): return prefix not in [p['nlri']['prefix'] for p in self.gobgp.get_adj_rib_out(q2)] wait_for_completion(f2) def f3(): l = q2.get_global_rib(prefix) # route from ibgp so aspath should be empty return len(l) == 1 and len(l[0]['aspath']) == 0 wait_for_completion(f3)
def _wait_for_boot(self): wait_for_completion(self._is_running)
def _wait_for_boot(self): return wait_for_completion(self._curl_is_running)
def test_04_softreset_in(self): self.g3.softreset(self.g1) wait_for_completion(lambda: len(self.g3.get_global_rib()) == 0) wait_for_completion(lambda: len(self.g3.get_global_rib(rf="vpnv4")) == 2) wait_for_completion(lambda: len(self.g2.get_global_rib()) == 1) wait_for_completion(lambda: len(self.g5.get_global_rib()) == 1)
def test_05_softreset_out(self): self.g3.softreset(self.g2, type='out') wait_for_completion(lambda: len(self.g3.get_global_rib()) == 0) wait_for_completion(lambda: len(self.g3.get_global_rib(rf="vpnv4")) == 2) wait_for_completion(lambda: len(self.g2.get_global_rib()) == 1) wait_for_completion(lambda: len(self.g5.get_global_rib()) == 1)
def test_02_add_routes(self): self.g1.local("gobgp global rib add 10.0.0.0/24") self.g4.local("gobgp global rib add 10.0.0.0/24") wait_for_completion(lambda: len(self.g3.get_global_rib(rf="vpnv4")) == 2) wait_for_completion(lambda: len(self.g2.get_global_rib()) == 1) wait_for_completion(lambda: len(self.g5.get_global_rib()) == 1)