github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/util/ipfsaddr/ipfsaddr_test.go (about)

     1  package ipfsaddr
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	ma "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
     8  	peer "github.com/ipfs/go-ipfs/p2p/peer"
     9  )
    10  
    11  var good = []string{
    12  	"/ipfs/5dru6bJPUM1B7N69528u49DJiWZnok",
    13  	"/ipfs/kTRX47RthhwNzWdi6ggwqjuX",
    14  	"/ipfs/QmUCseQWXCSrhf9edzVKTvoj8o8Ts5aXFGNPameZRPJ6uR",
    15  	"/ip4/1.2.3.4/tcp/1234/ipfs/5dru6bJPUM1B7N69528u49DJiWZnok",
    16  	"/ip4/1.2.3.4/tcp/1234/ipfs/kTRX47RthhwNzWdi6ggwqjuX",
    17  	"/ip4/1.2.3.4/tcp/1234/ipfs/QmUCseQWXCSrhf9edzVKTvoj8o8Ts5aXFGNPameZRPJ6uR",
    18  }
    19  
    20  var bad = []string{
    21  	"5dru6bJPUM1B7N69528u49DJiWZnok",                                // bad ma
    22  	"kTRX47RthhwNzWdi6ggwqjuX",                                      // bad ma
    23  	"QmUCseQWXCSrhf9edzVKTvoj8o8Ts5aXFGNPameZRPJ6uR",                // bad ma
    24  	"ipfs/5dru6bJPUM1B7N69528u49DJiWZnok",                           // bad ma
    25  	"ipfs/kTRX47RthhwNzWdi6ggwqjuX",                                 // bad ma
    26  	"ipfs/QmUCseQWXCSrhf9edzVKTvoj8o8Ts5aXFGNPameZRPJ6uR",           // bad ma
    27  	"/ipfs/5dru6bJPUM1B7N69528u49DJiWZno",                           // bad mh
    28  	"/ipfs/kTRX47RthhwNzWdi6ggwqju",                                 // bad mh
    29  	"/ipfs/QmUCseQWXCSrhf9edzVKTvj8o8Ts5aXFGNPameZRPJ6uR",           // bad mh
    30  	"/ipfs/QmUCseQWXCSrhf9edzVKTvoj8o8Ts5aXFGNPameZRPJ6uR/tcp/1234", // ipfs not last
    31  	"/ip4/1.2.3.4/tcp/ipfs/5dru6bJPUM1B7N69528u49DJiWZnok",          // bad tcp part
    32  	"/ip4/tcp/1234/ipfs/kTRX47RthhwNzWdi6ggwqjuX",                   // bad ip part
    33  	"/ip4/1.2.3.4/tcp/1234/ipfs",                                    // no id
    34  	"/ip4/1.2.3.4/tcp/1234/ipfs/",                                   // no id
    35  }
    36  
    37  func newMultiaddr(t *testing.T, s string) ma.Multiaddr {
    38  	maddr, err := ma.NewMultiaddr(s)
    39  	if err != nil {
    40  		t.Fatal(err)
    41  	}
    42  	return maddr
    43  }
    44  
    45  func TestParseStringGood(t *testing.T) {
    46  	for _, g := range good {
    47  		if _, err := ParseString(g); err != nil {
    48  			t.Error("failed to parse", g, err)
    49  		}
    50  	}
    51  }
    52  
    53  func TestParseStringBad(t *testing.T) {
    54  	for _, b := range bad {
    55  		if _, err := ParseString(b); err == nil {
    56  			t.Error("succeeded in parsing", b)
    57  		}
    58  	}
    59  }
    60  
    61  func TestParseMultiaddrGood(t *testing.T) {
    62  	for _, g := range good {
    63  		if _, err := ParseMultiaddr(newMultiaddr(t, g)); err != nil {
    64  			t.Error("failed to parse", g, err)
    65  		}
    66  	}
    67  }
    68  
    69  func TestParseMultiaddrBad(t *testing.T) {
    70  	for _, b := range bad {
    71  		m, err := ma.NewMultiaddr(b)
    72  		if err != nil {
    73  			continue // skip these.
    74  		}
    75  
    76  		if _, err := ParseMultiaddr(m); err == nil {
    77  			t.Error("succeeded in parsing", m)
    78  		}
    79  	}
    80  }
    81  
    82  func TestIDMatches(t *testing.T) {
    83  	for _, g := range good {
    84  		a, err := ParseString(g)
    85  		if err != nil {
    86  			t.Error("failed to parse", g, err)
    87  			continue
    88  		}
    89  
    90  		sp := strings.Split(g, "/")
    91  		sid := sp[len(sp)-1]
    92  		id, err := peer.IDB58Decode(sid)
    93  		if err != nil {
    94  			t.Error("failed to parse", sid, err)
    95  			continue
    96  		}
    97  
    98  		if a.ID() != id {
    99  			t.Error("not equal", a.ID(), id)
   100  		}
   101  	}
   102  }
   103  
   104  func TestMultiaddrMatches(t *testing.T) {
   105  	for _, g := range good {
   106  		a, err := ParseString(g)
   107  		if err != nil {
   108  			t.Error("failed to parse", g, err)
   109  			continue
   110  		}
   111  
   112  		m := newMultiaddr(t, g)
   113  		if !a.Multiaddr().Equal(m) {
   114  			t.Error("not equal", a.Multiaddr(), m)
   115  		}
   116  	}
   117  }
   118  
   119  func TestTransport(t *testing.T) {
   120  	for _, g := range good {
   121  		a, err := ParseString(g)
   122  		if err != nil {
   123  			t.Error("failed to parse", g, err)
   124  			continue
   125  		}
   126  
   127  		m := newMultiaddr(t, g)
   128  		split := ma.Split(m)
   129  		m = ma.Join(split[:len(split)-1]...)
   130  		if a.Multiaddr().Equal(m) {
   131  			t.Error("should not be equal", a.Multiaddr(), m)
   132  		}
   133  		if !Transport(a).Equal(m) {
   134  			t.Error("should be equal", Transport(a), m)
   135  		}
   136  	}
   137  }