Skip to content

Commit 6485c2b

Browse files
committed
add IPNetworkProfile.Create(IPNetwork)
1 parent fa86b31 commit 6485c2b

File tree

2 files changed

+77
-10
lines changed

2 files changed

+77
-10
lines changed

src/Smdn.Net.AddressResolution/Smdn.Net/IPNetworkProfile.CreateFromSubnetMask.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
// SPDX-FileCopyrightText: 2023 smdn <smdn@smdn.jp>
22
// SPDX-License-Identifier: MIT
3-
#undef SYSTEM_NET_IPNETWORK // enable this when .NET 8 GA is released
4-
53
using System;
64
using System.Buffers.Binary;
75
using System.Collections.Generic;

tests/Smdn.Net.AddressResolution/Smdn.Net/IPNetworkProfile.cs

Lines changed: 77 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
// SPDX-FileCopyrightText: 2023 smdn <smdn@smdn.jp>
22
// SPDX-License-Identifier: MIT
3-
#undef SYSTEM_NET_IPNETWORK // enable this when .NET 8 GA is released
4-
53
using System;
64
using System.Collections.Generic;
75
using System.Linq;
@@ -15,16 +13,87 @@ namespace Smdn.Net;
1513
[TestFixture]
1614
public partial class IPNetworkProfileTests {
1715
#if SYSTEM_NET_IPNETWORK
18-
[Test]
19-
public void Create_FromIPNetwork_IPv4()
16+
private static System.Collections.IEnumerable YieldTestCases_Create_FromIPNetwork_IPv4()
2017
{
21-
Assert.Fail("test not implemented");
18+
yield return new object[] {
19+
IPNetwork.Parse("192.168.0.0/24"),
20+
new Action<IReadOnlyList<IPAddress>>(static addresses => {
21+
Assert.That(addresses.Count, Is.EqualTo(254));
22+
Assert.That(addresses, Has.Member(IPAddress.Parse("192.168.0.1")));
23+
Assert.That(addresses, Has.Member(IPAddress.Parse("192.168.0.254")));
24+
Assert.That(addresses, Has.No.Member(IPAddress.Parse("192.168.0.0")));
25+
Assert.That(addresses, Has.No.Member(IPAddress.Parse("192.168.0.255")));
26+
Assert.That(addresses, Has.No.Member(IPAddress.Parse("192.168.1.0")));
27+
Assert.That(addresses, Has.No.Member(IPAddress.Parse("127.0.0.1")));
28+
})
29+
};
30+
31+
yield return new object[] {
32+
IPNetwork.Parse("192.168.0.0/30"),
33+
new Action<IReadOnlyList<IPAddress>>(static addresses => {
34+
Assert.That(addresses.Count, Is.EqualTo(2));
35+
Assert.That(addresses, Has.Member(IPAddress.Parse("192.168.0.1")));
36+
Assert.That(addresses, Has.Member(IPAddress.Parse("192.168.0.2")));
37+
Assert.That(addresses, Has.No.Member(IPAddress.Parse("192.168.0.0")));
38+
Assert.That(addresses, Has.No.Member(IPAddress.Parse("192.168.0.3")));
39+
Assert.That(addresses, Has.No.Member(IPAddress.Parse("127.0.0.1")));
40+
})
41+
};
42+
43+
yield return new object[] {
44+
IPNetwork.Parse("192.168.0.0/20"),
45+
new Action<IReadOnlyList<IPAddress>>(static addresses => {
46+
Assert.That(addresses.Count, Is.EqualTo(4094));
47+
Assert.That(addresses, Has.Member(IPAddress.Parse("192.168.0.1")));
48+
Assert.That(addresses, Has.Member(IPAddress.Parse("192.168.0.255")));
49+
Assert.That(addresses, Has.Member(IPAddress.Parse("192.168.15.0")));
50+
Assert.That(addresses, Has.Member(IPAddress.Parse("192.168.15.254")));
51+
Assert.That(addresses, Has.No.Member(IPAddress.Parse("192.168.0.0")));
52+
Assert.That(addresses, Has.No.Member(IPAddress.Parse("192.168.15.255")));
53+
Assert.That(addresses, Has.No.Member(IPAddress.Parse("127.0.0.1")));
54+
})
55+
};
56+
57+
yield return new object[] {
58+
IPNetwork.Parse("192.168.0.0/32"),
59+
new Action<IReadOnlyList<IPAddress>>(static addresses => {
60+
Assert.That(addresses.Count, Is.EqualTo(1));
61+
62+
Assert.That(addresses, Has.Member(IPAddress.Parse("192.168.0.0")));
63+
})
64+
};
2265
}
2366

24-
[Test]
25-
public void Create_FromIPNetwork_IPv6()
67+
[TestCaseSource(nameof(YieldTestCases_Create_FromIPNetwork_IPv4))]
68+
public void Create_FromIPNetwork_IPv4(
69+
IPNetwork ipNetwork,
70+
Action<IReadOnlyList<IPAddress>> assertAddresses
71+
)
2672
{
27-
Assert.Fail("test not implemented");
73+
var profile = IPNetworkProfile.Create(ipNetwork);
74+
75+
Assert.That(profile.NetworkInterface, Is.Null, nameof(profile.NetworkInterface));
76+
77+
var addresses = profile.GetAddressRange()?.ToList();
78+
79+
Assert.That(addresses, Is.Not.Null, nameof(addresses));
80+
81+
assertAddresses(addresses!);
82+
}
83+
84+
private static System.Collections.IEnumerable YieldTestCases_Create_FromIPNetwork_IPv6()
85+
{
86+
yield return new object?[] { IPNetwork.Parse("2001:db8::/32") };
87+
yield return new object?[] { IPNetwork.Parse("2001:db8:3c4d::/48") };
88+
yield return new object?[] { IPNetwork.Parse("2001:db8:3c4d:15::/64") };
89+
}
90+
91+
[TestCaseSource(nameof(YieldTestCases_Create_FromIPNetwork_IPv6))]
92+
public void Create_FromIPNetwork_IPv6(IPNetwork network)
93+
{
94+
Assert.Throws<NotImplementedException>(
95+
() => IPNetworkProfile.Create(network: network)
96+
);
2897
}
2998
#endif
3099

0 commit comments

Comments
 (0)