Rework address roles, making Address::role optional, rework determining uplink/downlinks/parent/children

This commit is contained in:
2024-05-09 21:22:30 +10:00
parent 2765a27db8
commit 23159d19d5
23 changed files with 667 additions and 421 deletions

View File

@@ -46,8 +46,8 @@ use App\Models\{Address,Domain,Setup,System};
* + See COMMON
* + Everything else is sent to the HUB or Host or RC (our uplink)
*
* @see Address::parent()
* @see Address::children()
* @see Address::uplink()
* @see Address::downlinks()
*/
class RoutingTest extends TestCase
{
@@ -106,9 +106,9 @@ class RoutingTest extends TestCase
// Pick ZC without any session info - we have 0 children
$ao = Address::findFTN('101:0/0@a');
$this->assertEquals($ao->role,Address::NODE_ZC);
$this->assertCount(0,$ao->children());
$this->assertNull($ao->parent());
$this->assertEquals($ao->role_id,Address::NODE_ZC);
$this->assertCount(0,$ao->downlinks());
$this->assertNull($ao->uplink());
}
// If we have a ZC, make sure we are routing to all it's children
@@ -117,7 +117,7 @@ class RoutingTest extends TestCase
$this->session_zc();
$ao = Address::findFTN('101:0/0@a');
$this->assertCount(935,$ao->children());
$this->assertCount(935,$ao->downlinks());
}
// An RC's parent should be the ZC, when we have session details with parent
@@ -126,8 +126,8 @@ class RoutingTest extends TestCase
$this->session_zc();
$ao = Address::findFTN('101:1/0@a');
$this->assertEquals($ao->role,Address::NODE_RC);
$this->assertEquals('101:0/0.0@a',$ao->parent()->ftn);
$this->assertEquals($ao->role_id,Address::NODE_RC);
$this->assertEquals('101:0/0.0@a',$ao->uplink()->ftn);
}
// Get a list of active addresses in a Region
@@ -136,7 +136,7 @@ class RoutingTest extends TestCase
$this->session_rc();
$ao = Address::findFTN('100:1/0@a');
$this->assertEquals(185,$ao->children()->count());
$this->assertEquals(185,$ao->downlinks()->count());
}
// An RCs node still collects mail from the RC
@@ -146,8 +146,8 @@ class RoutingTest extends TestCase
// An RCs node should still be the RC
$ao = Address::findFTN('100:1/100@a');
$this->assertEquals($ao->role,Address::NODE_ACTIVE);
$this->assertEquals('100:1/0.0@a',$ao->parent()->ftn);
$this->assertEquals($ao->role_id,Address::NODE_NN);
$this->assertEquals('100:1/0.0@a',$ao->uplink()->ftn);
}
// An NC collects mail for its children
@@ -157,8 +157,8 @@ class RoutingTest extends TestCase
// A NCs parent should still be the RC
$ao = Address::findFTN('100:10/0@a');
$this->assertEquals($ao->role,Address::NODE_NC);
$this->assertEquals('100:1/0.0@a',$ao->parent()->ftn);
$this->assertEquals($ao->role_id,Address::NODE_NC);
$this->assertEquals('100:1/0.0@a',$ao->uplink()->ftn);
}
// A Hub still collects mail from NC
@@ -168,8 +168,8 @@ class RoutingTest extends TestCase
// A Hubs parent should still be the NC
$ao = Address::findFTN('100:10/20.0@a');
$this->assertEquals($ao->role,Address::NODE_HC);
$this->assertEquals('100:1/0.0@a',$ao->parent()->ftn);
$this->assertEquals($ao->role_id,Address::NODE_HC);
$this->assertEquals('100:1/0.0@a',$ao->uplink()->ftn);
}
// A Hub's node still collects mail from Hub
@@ -179,8 +179,8 @@ class RoutingTest extends TestCase
// A Hubs node should still be the Hub
$ao = Address::findFTN('100:10/22.0@a');
$this->assertEquals($ao->role,Address::NODE_ACTIVE);
$this->assertEquals('100:1/0.0@a',$ao->parent()->ftn);
$this->assertEquals($ao->role_id,Address::NODE_NN);
$this->assertEquals('100:1/0.0@a',$ao->uplink()->ftn);
}
// An RCs parent is us even if we have session details for another RC
@@ -189,7 +189,7 @@ class RoutingTest extends TestCase
$this->session_rc();
$ao = Address::findFTN('100:2/0@a');
$this->assertNull($ao->parent()?->ftn);
$this->assertNull($ao->uplink()?->ftn);
}
// If we also have session details for an NC, then there are less RC nodes
@@ -199,7 +199,7 @@ class RoutingTest extends TestCase
$this->session_nc();
$ao = Address::findFTN('100:1/0@a');
$this->assertCount(185-36,$ao->children());
$this->assertCount(185-36,$ao->downlinks());
}
// If we also have session details for an Hub, then there are less RC nodes
@@ -211,10 +211,10 @@ class RoutingTest extends TestCase
$ao->system->sessions()->attach([$ao->zone_id=>['sespass'=>'ABCD']]);
$ao = Address::findFTN('100:1/0@a');
$this->assertCount(185-6,$ao->children());
$this->assertCount(185-6,$ao->downlinks());
$ao = Address::findFTN('100:10/22@a');
$this->assertEquals('100:10/20.0@a',$ao->parent()->ftn);
$this->assertEquals('100:10/20.0@a',$ao->uplink()->ftn);
}
// If we also have session details for an Hub, then there are less RC nodes
@@ -223,7 +223,7 @@ class RoutingTest extends TestCase
$this->session_hub();
$ao = Address::findFTN('100:10/22@a');
$this->assertEquals('100:10/20.0@a',$ao->parent()->ftn);
$this->assertEquals('100:10/20.0@a',$ao->uplink()->ftn);
}
// When we have an RC with session details, we route to all its children
@@ -232,7 +232,7 @@ class RoutingTest extends TestCase
$this->session_nc();
$ao = Address::findFTN('100:10/0@a');
$this->assertCount(35,$ao->children());
$this->assertCount(35,$ao->downlinks());
}
public function test_complex_rc_nc_hc()
@@ -242,29 +242,29 @@ class RoutingTest extends TestCase
$this->session_hub();
$ao = Address::findFTN('100:1/100.0@a');
$this->assertCount(0,$ao->children());
$this->assertEquals('100:1/0.0@a',$ao->parent()->ftn);
$this->assertCount(0,$ao->downlinks());
$this->assertEquals('100:1/0.0@a',$ao->uplink()->ftn);
// RC
$ao = Address::findFTN('100:1/0.0@a');
$this->assertCount(186-1-30-6,$ao->children());
$this->assertCount(186-1-30-6,$ao->downlinks());
$ao = Address::findFTN('100:11/0.0@a');
$this->assertEquals('100:1/0.0@a',$ao->parent()->ftn);
$this->assertEquals('100:1/0.0@a',$ao->uplink()->ftn);
// NC
$ao = Address::findFTN('100:10/0.0@a');
$this->assertCount(36-1-6,$ao->children());
$this->assertCount(36-1-6,$ao->downlinks());
$ao = Address::findFTN('100:10/10.0@a');
$this->assertEquals('100:10/0.0@a',$ao->parent()->ftn);
$this->assertEquals('100:10/0.0@a',$ao->uplink()->ftn);
// HC
$ao = Address::findFTN('100:10/20.0@a');
$this->assertCount(6-1,$ao->children());
$this->assertCount(6-1,$ao->downlinks());
$ao = Address::findFTN('100:10/22.0@a');
$this->assertEquals('100:10/20.0@a',$ao->parent()->ftn);
$this->assertEquals('100:10/20.0@a',$ao->uplink()->ftn);
}
public function test_complex_rc_nc_hc_us()
@@ -283,29 +283,29 @@ class RoutingTest extends TestCase
$ao->system->sessions()->attach([$ao->zone_id=>['sespass'=>'ABCD']]);
$ao = Address::findFTN('100:1/100.0@a');
$this->assertCount(0,$ao->children());
$this->assertEquals('100:1/0.0@a',$ao->parent()?->ftn);
$this->assertCount(0,$ao->downlinks());
$this->assertEquals('100:1/0.0@a',$ao->uplink()?->ftn);
// RC
$ao = Address::findFTN('100:1/0.0@a');
$this->assertCount(186-36-36-1,$ao->children());
$this->assertCount(186-36-36-1,$ao->downlinks());
$ao = Address::findFTN('100:11/0.0@a');
$this->assertEquals('100:11/0.0@a',$ao->parent()->ftn);
$this->assertEquals('100:11/0.0@a',$ao->uplink()->ftn);
// NC
$ao = Address::findFTN('100:10/0.0@a');
$this->assertCount(36-6-1,$ao->children());
$this->assertCount(36-6-1,$ao->downlinks());
$ao = Address::findFTN('100:10/10.0@a');
$this->assertNull($ao->parent()?->ftn);
$this->assertNull($ao->uplink()?->ftn);
// HC
$ao = Address::findFTN('100:10/20.0@a');
$this->assertCount(6-1,$ao->children());
$this->assertCount(6-1,$ao->downlinks());
$ao = Address::findFTN('100:10/22.0@a');
$this->assertEquals('100:10/20.0@a',$ao->parent()->ftn);
$this->assertEquals('100:10/20.0@a',$ao->uplink()->ftn);
Cache::forget('so');
}
@@ -330,9 +330,9 @@ class RoutingTest extends TestCase
$ao->system->sessions()->attach([$ao->zone_id=>['sespass'=>'ABCD']]);
$ao = Address::findFTN('100:10/21.2@a');
$this->assertEquals('100:10/21.0@a',$ao->parent()?->ftn);
$this->assertEquals('100:10/21.0@a',$ao->uplink()?->ftn);
$ao = Address::findFTN('100:10/21@a');
$this->assertCount(1,$ao->children());
$this->assertCount(1,$ao->downlinks());
}
}