github.com/opentofu/opentofu@v1.7.1/internal/legacy/helper/acctest/random_test.go (about)

     1  // Copyright (c) The OpenTofu Authors
     2  // SPDX-License-Identifier: MPL-2.0
     3  // Copyright (c) 2023 HashiCorp, Inc.
     4  // SPDX-License-Identifier: MPL-2.0
     5  
     6  package acctest
     7  
     8  import (
     9  	"regexp"
    10  	"testing"
    11  )
    12  
    13  func TestRandIpAddress(t *testing.T) {
    14  	testCases := []struct {
    15  		s           string
    16  		expected    *regexp.Regexp
    17  		expectedErr string
    18  	}{
    19  		{
    20  			s:        "1.1.1.1/32",
    21  			expected: regexp.MustCompile(`^1\.1\.1\.1$`),
    22  		},
    23  		{
    24  			s:        "10.0.0.0/8",
    25  			expected: regexp.MustCompile(`^10\.\d{1,3}\.\d{1,3}\.\d{1,3}$`),
    26  		},
    27  		{
    28  			s:           "0.0.0.0/0",
    29  			expectedErr: "CIDR range is too large: 32",
    30  		},
    31  		{
    32  			s:        "449d:e5f1:14b1:ddf3:8525:7e9e:4a0d:4a82/128",
    33  			expected: regexp.MustCompile(`^449d:e5f1:14b1:ddf3:8525:7e9e:4a0d:4a82$`),
    34  		},
    35  		{
    36  			s:        "2001:db8::/112",
    37  			expected: regexp.MustCompile(`^2001:db8::[[:xdigit:]]{1,4}$`),
    38  		},
    39  		{
    40  			s:           "2001:db8::/64",
    41  			expectedErr: "CIDR range is too large: 64",
    42  		},
    43  		{
    44  			s:           "abcdefg",
    45  			expectedErr: "invalid CIDR address: abcdefg",
    46  		},
    47  	}
    48  
    49  	for i, tc := range testCases {
    50  		v, err := RandIpAddress(tc.s)
    51  		if err != nil {
    52  			msg := err.Error()
    53  			if tc.expectedErr == "" {
    54  				t.Fatalf("expected test case %d to succeed but got error %q, ", i, msg)
    55  			}
    56  			if msg != tc.expectedErr {
    57  				t.Fatalf("expected test case %d to fail with %q but got %q", i, tc.expectedErr, msg)
    58  			}
    59  		} else if !tc.expected.MatchString(v) {
    60  			t.Fatalf("expected test case %d to return %q but got %q", i, tc.expected, v)
    61  		}
    62  	}
    63  }