Files
container/Tests/ContainerizationExtrasTests/TestIPAddress.swift
T
2025-06-12 09:57:35 -04:00

91 lines
3.4 KiB
Swift

//===----------------------------------------------------------------------===//
// Copyright © 2025 Apple Inc. and the Containerization project authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//===----------------------------------------------------------------------===//
//
import Foundation
import Testing
@testable import ContainerizationExtras
final class TestIPv4Address {
@Test
func testUintMask() {
#expect(0xffff_ffff == PrefixLength(0).suffixMask32)
#expect(0x0000_7fff == PrefixLength(17).suffixMask32)
#expect(0x0000_0000 == PrefixLength(32).suffixMask32)
#expect(0x0000_0000 == PrefixLength(33).suffixMask32)
#expect(0x0000_0000 == PrefixLength(0).prefixMask32)
#expect(0xfffe_0000 == PrefixLength(15).prefixMask32)
#expect(0xffff_ffff == PrefixLength(32).prefixMask32)
#expect(0xffff_ffff == PrefixLength(33).prefixMask32)
}
@Test
func testOctetCountError() {
let ipAddressValue = "192.168.64"
do {
_ = try IPv4Address(ipAddressValue)
#expect(Bool(false), "Expected AddressError.invalidStringAddress to be thrown")
} catch {
#expect(
error as? NetworkAddressError == .invalidStringAddress(address: ipAddressValue),
"Unexpected error thrown: \(error)")
}
}
@Test
func testOctetInvalidError() {
let ipAddressValue = "192.168.256.255"
do {
_ = try IPv4Address(ipAddressValue)
#expect(Bool(false), "Expected AddressError.invalidStringAddress to be thrown")
} catch {
#expect(
error as? NetworkAddressError == .invalidStringAddress(address: ipAddressValue),
"Unexpected error thrown: \(error)")
}
}
@Test
func testAddressFromString() throws {
let ipAddressValue = "192.168.64.25"
let ipAddress = try IPv4Address(ipAddressValue)
#expect(ipAddressValue == ipAddress.description)
#expect(UInt32(0xc0a8_4019) == ipAddress.value)
#expect([192, 168, 64, 25] == ipAddress.networkBytes)
}
@Test
func testAddressPrefix() throws {
let ipAddressValue = "172.18.204.85"
let ipAddress = try IPv4Address(ipAddressValue)
#expect(0x0000_0000 == ipAddress.prefix(prefixLength: 0).value)
#expect(0xac12_cc55 == ipAddress.prefix(prefixLength: 32).value)
#expect(0xac12_cc55 == ipAddress.prefix(prefixLength: 33).value)
#expect(0xac10_0000 == ipAddress.prefix(prefixLength: 14).value)
}
@Test
func testCoding() async throws {
let text = "200.100.50.25"
let expected = try IPv4Address(text)
let data = try JSONEncoder().encode(expected)
let actual = try JSONDecoder().decode(IPv4Address.self, from: data)
#expect(expected == actual)
}
}