github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/swarm/api/uri_test.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 12:09:47</date>
    10  //</624342670386401280>
    11  
    12  //
    13  //
    14  //
    15  //
    16  //
    17  //
    18  //
    19  //
    20  //
    21  //
    22  //
    23  //
    24  //
    25  //
    26  //
    27  
    28  package api
    29  
    30  import (
    31  	"bytes"
    32  	"reflect"
    33  	"testing"
    34  
    35  	"github.com/ethereum/go-ethereum/swarm/storage"
    36  )
    37  
    38  func TestParseURI(t *testing.T) {
    39  	type test struct {
    40  		uri                       string
    41  		expectURI                 *URI
    42  		expectErr                 bool
    43  		expectRaw                 bool
    44  		expectImmutable           bool
    45  		expectList                bool
    46  		expectHash                bool
    47  		expectDeprecatedRaw       bool
    48  		expectDeprecatedImmutable bool
    49  		expectValidKey            bool
    50  		expectAddr                storage.Address
    51  	}
    52  	tests := []test{
    53  		{
    54  			uri:       "",
    55  			expectErr: true,
    56  		},
    57  		{
    58  			uri:       "foo",
    59  			expectErr: true,
    60  		},
    61  		{
    62  			uri:       "bzz",
    63  			expectErr: true,
    64  		},
    65  		{
    66  			uri:       "bzz:",
    67  			expectURI: &URI{Scheme: "bzz"},
    68  		},
    69  		{
    70  			uri:             "bzz-immutable:",
    71  			expectURI:       &URI{Scheme: "bzz-immutable"},
    72  			expectImmutable: true,
    73  		},
    74  		{
    75  			uri:       "bzz-raw:",
    76  			expectURI: &URI{Scheme: "bzz-raw"},
    77  			expectRaw: true,
    78  		},
    79  		{
    80  			uri:       "bzz:/",
    81  			expectURI: &URI{Scheme: "bzz"},
    82  		},
    83  		{
    84  			uri:       "bzz:/abc123",
    85  			expectURI: &URI{Scheme: "bzz", Addr: "abc123"},
    86  		},
    87  		{
    88  			uri:       "bzz:/abc123/path/to/entry",
    89  			expectURI: &URI{Scheme: "bzz", Addr: "abc123", Path: "path/to/entry"},
    90  		},
    91  		{
    92  			uri:       "bzz-raw:/",
    93  			expectURI: &URI{Scheme: "bzz-raw"},
    94  			expectRaw: true,
    95  		},
    96  		{
    97  			uri:       "bzz-raw:/abc123",
    98  			expectURI: &URI{Scheme: "bzz-raw", Addr: "abc123"},
    99  			expectRaw: true,
   100  		},
   101  		{
   102  			uri:       "bzz-raw:/abc123/path/to/entry",
   103  			expectURI: &URI{Scheme: "bzz-raw", Addr: "abc123", Path: "path/to/entry"},
   104  			expectRaw: true,
   105  		},
   106  		{
   107  uri:       "bzz://
   108  			expectURI: &URI{Scheme: "bzz"},
   109  		},
   110  		{
   111  uri:       "bzz://
   112  			expectURI: &URI{Scheme: "bzz", Addr: "abc123"},
   113  		},
   114  		{
   115  uri:       "bzz://
   116  			expectURI: &URI{Scheme: "bzz", Addr: "abc123", Path: "path/to/entry"},
   117  		},
   118  		{
   119  			uri:        "bzz-hash:",
   120  			expectURI:  &URI{Scheme: "bzz-hash"},
   121  			expectHash: true,
   122  		},
   123  		{
   124  			uri:        "bzz-hash:/",
   125  			expectURI:  &URI{Scheme: "bzz-hash"},
   126  			expectHash: true,
   127  		},
   128  		{
   129  			uri:        "bzz-list:",
   130  			expectURI:  &URI{Scheme: "bzz-list"},
   131  			expectList: true,
   132  		},
   133  		{
   134  			uri:        "bzz-list:/",
   135  			expectURI:  &URI{Scheme: "bzz-list"},
   136  			expectList: true,
   137  		},
   138  		{
   139  uri: "bzz-raw://
   140  			expectURI: &URI{Scheme: "bzz-raw",
   141  				Addr: "4378d19c26590f1a818ed7d6a62c3809e149b0999cab5ce5f26233b3b423bf8c",
   142  			},
   143  			expectValidKey: true,
   144  			expectRaw:      true,
   145  			expectAddr: storage.Address{67, 120, 209, 156, 38, 89, 15, 26,
   146  				129, 142, 215, 214, 166, 44, 56, 9,
   147  				225, 73, 176, 153, 156, 171, 92, 229,
   148  				242, 98, 51, 179, 180, 35, 191, 140,
   149  			},
   150  		},
   151  	}
   152  	for _, x := range tests {
   153  		actual, err := Parse(x.uri)
   154  		if x.expectErr {
   155  			if err == nil {
   156  				t.Fatalf("expected %s to error", x.uri)
   157  			}
   158  			continue
   159  		}
   160  		if err != nil {
   161  			t.Fatalf("error parsing %s: %s", x.uri, err)
   162  		}
   163  		if !reflect.DeepEqual(actual, x.expectURI) {
   164  			t.Fatalf("expected %s to return %#v, got %#v", x.uri, x.expectURI, actual)
   165  		}
   166  		if actual.Raw() != x.expectRaw {
   167  			t.Fatalf("expected %s raw to be %t, got %t", x.uri, x.expectRaw, actual.Raw())
   168  		}
   169  		if actual.Immutable() != x.expectImmutable {
   170  			t.Fatalf("expected %s immutable to be %t, got %t", x.uri, x.expectImmutable, actual.Immutable())
   171  		}
   172  		if actual.List() != x.expectList {
   173  			t.Fatalf("expected %s list to be %t, got %t", x.uri, x.expectList, actual.List())
   174  		}
   175  		if actual.Hash() != x.expectHash {
   176  			t.Fatalf("expected %s hash to be %t, got %t", x.uri, x.expectHash, actual.Hash())
   177  		}
   178  		if x.expectValidKey {
   179  			if actual.Address() == nil {
   180  				t.Fatalf("expected %s to return a valid key, got nil", x.uri)
   181  			} else {
   182  				if !bytes.Equal(x.expectAddr, actual.Address()) {
   183  					t.Fatalf("expected %s to be decoded to %v", x.expectURI.Addr, x.expectAddr)
   184  				}
   185  			}
   186  		}
   187  	}
   188  }
   189