github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/dhclient/iscsiuri_test.go (about)

     1  // Copyright 2019 the u-root Authors. All rights reserved
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package dhclient
     6  
     7  import (
     8  	"net"
     9  	"reflect"
    10  	"testing"
    11  )
    12  
    13  func TestParseURI(t *testing.T) {
    14  	for _, tt := range []struct {
    15  		uri    string
    16  		target *net.TCPAddr
    17  		volume string
    18  		want   string
    19  	}{
    20  		{
    21  			uri:    "iscsi:192.168.1.1:::1:iqn.com.oracle:boot",
    22  			target: &net.TCPAddr{IP: net.ParseIP("192.168.1.1"), Port: 3260},
    23  			volume: "iqn.com.oracle:boot",
    24  		},
    25  		{
    26  			uri:    "iscsi:@192.168.1.1::3260::iqn.com.oracle:boot",
    27  			target: &net.TCPAddr{IP: net.ParseIP("192.168.1.1"), Port: 3260},
    28  			volume: "iqn.com.oracle:boot",
    29  		},
    30  		{
    31  			uri:    "iscsi:[fe80::1]::3260::iqn.com.google:esxi-boot-image",
    32  			target: &net.TCPAddr{IP: net.ParseIP("fe80::1"), Port: 3260},
    33  			volume: "iqn.com.google:esxi-boot-image",
    34  		},
    35  		{
    36  			uri:    "iscsi:[fe80::1]::3260::iqn.com.google:esxi-boot-]:image",
    37  			target: &net.TCPAddr{IP: net.ParseIP("fe80::1"), Port: 3260},
    38  			volume: "iqn.com.google:esxi-boot-]:image",
    39  		},
    40  		{
    41  			uri:    "iscsi:192.168.1.1::3260::iqn.com.google:[fe80::1]",
    42  			target: &net.TCPAddr{IP: net.ParseIP("192.168.1.1"), Port: 3260},
    43  			volume: "iqn.com.google:[fe80::1]",
    44  		},
    45  		{
    46  			uri:    "iscsi:[fe80::1]::3260::iqn.com.google:[foobar]",
    47  			target: &net.TCPAddr{IP: net.ParseIP("fe80::1"), Port: 3260},
    48  			volume: "iqn.com.google:[foobar]",
    49  		},
    50  		{
    51  			uri:    "iscsi:192.168.1.1::3260::iqn.com.google:esxi-boot-image",
    52  			target: &net.TCPAddr{IP: net.ParseIP("192.168.1.1"), Port: 3260},
    53  			volume: "iqn.com.google:esxi-boot-image",
    54  		},
    55  		{
    56  			uri:    "iscsi:192.168.1.1::3000::iqn.com.google:esxi-boot-image",
    57  			target: &net.TCPAddr{IP: net.ParseIP("192.168.1.1"), Port: 3000},
    58  			volume: "iqn.com.google:esxi-boot-image",
    59  		},
    60  		{
    61  			uri:    "iscsi:192.168.1.1::::iqn.com.google:esxi-boot-image",
    62  			target: &net.TCPAddr{IP: net.ParseIP("192.168.1.1"), Port: 3260},
    63  			volume: "iqn.com.google:esxi-boot-image",
    64  		},
    65  		{
    66  			uri:    "iscsi:192.168.1.1::::iqn.com.google::::",
    67  			target: &net.TCPAddr{IP: net.ParseIP("192.168.1.1"), Port: 3260},
    68  			volume: "iqn.com.google::::",
    69  		},
    70  		{
    71  			uri:  "iscsi:192.168.1.1::::",
    72  			want: "iSCSI URI \"iscsi:192.168.1.1::::\" is missing a volume name",
    73  		},
    74  		{
    75  			uri:  "iscsi:192.168.1.1:::",
    76  			want: "iSCSI URI \"iscsi:192.168.1.1:::\" failed to parse: fields missing",
    77  		},
    78  		{
    79  			uri:  "iscs:192.168.1.1::::",
    80  			want: "iSCSI URI \"iscs:192.168.1.1::::\" is missing iscsi scheme prefix, have iscs",
    81  		},
    82  		{
    83  			uri:  "",
    84  			want: "iSCSI URI \"\" failed to parse: fields missing",
    85  		},
    86  		{
    87  			uri:  "iscsi:192.168.1.1::foobar::volume",
    88  			want: "iSCSI URI \"iscsi:192.168.1.1::foobar::volume\" has invalid port: strconv.Atoi: parsing \"foobar\": invalid syntax",
    89  		},
    90  		{
    91  			uri:  "iscsi:[fe80::1::::",
    92  			want: "iSCSI URI \"iscsi:[fe80::1::::\" failed to parse: invalid IPv6 address",
    93  		},
    94  	} {
    95  		gtarget, gvolume, got := ParseISCSIURI(tt.uri)
    96  		if (got != nil && got.Error() != tt.want) || (got == nil && len(tt.want) > 0) {
    97  			t.Errorf("parseISCSIURI(%s) = %v, want %v", tt.uri, got, tt.want)
    98  		}
    99  		if gvolume != tt.volume {
   100  			t.Errorf("parseISCSIURI(%s) = volume %s, want %s", tt.uri, gvolume, tt.volume)
   101  		}
   102  		if !reflect.DeepEqual(gtarget, tt.target) {
   103  			t.Errorf("parseISCSIURI(%s) = target %s, want %s", tt.uri, gtarget, tt.target)
   104  		}
   105  	}
   106  }