Files
container/Tests/ContainerizationExtrasTests/TestIPAddress.swift
T
+6 3407cc3f16 initial commit
Co-authored-by: Aditya Ramani <a_ramani@apple.com>
Co-authored-by: Agam Dua <agam_dua@apple.com>
Co-authored-by: Danny Canter <danny_canter@apple.com>
Co-authored-by: Dmitry Kovba <dkovba@apple.com>
Co-authored-by: Eric Ernst <eric_ernst@apple.com>
Co-authored-by: Evan Hazlett <ehazlett@apple.com>
Co-authored-by: Gilbert Song <gilbertsong@apple.com>
Co-authored-by: Hugh Bussell <hbussell@apple.com>
Co-authored-by: John Logan <john_logan@apple.com>
Co-authored-by: Kathryn Baldauf <k_baldauf@apple.com>
Co-authored-by: Madhu Venugopal <mvenugopal@apple.com>
Co-authored-by: Michael Crosby <michael_crosby@apple.com>
Co-authored-by: Sidhartha Mani <sidhartha_mani@apple.com>
Co-authored-by: Tanweer Noor <tnoor@apple.com>
Co-authored-by: Ximena Perez Diaz <xperez528@gmail.com>
Co-authored-by: Yibo Zhuang <yzhuang@apple.com>
2025-06-05 16:15:21 -07: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)
}
}