vendor in new iptb code (and as a result, go-multiaddr-net and friends
License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>
Jeromy committed
Oct 11, 2015 at 21:22 UTC
4ace45d9301abc5941f2761aabc9ff84caccea61
1 file changed
+89
-11
test/dependencies/iptb/main.go
+89
-11
@@ -73,13 +73,19 @@ type initCfg struct {
73
Bootstrap string
74
PortStart int
75
Mdns bool
76
+ Utp bool
77
}
78
79
func (c *initCfg) swarmAddrForPeer(i int) string {
80
+ str := "/ip4/0.0.0.0/tcp/%d"
81
+ if c.Utp {
82
+ str = "/ip4/0.0.0.0/udp/%d/utp"
83
+ }
84
+
85
if c.PortStart == 0 {
80
- return "/ip4/0.0.0.0/tcp/0"
86
+ return fmt.Sprintf(str, 0)
87
}
82
- return fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", c.PortStart+i)
88
+ return fmt.Sprintf(str, c.PortStart+i)
89
}
90
91
func (c *initCfg) apiAddrForPeer(i int) string {
@@ -250,6 +256,20 @@ func IpfsKillAll() error {
256
return nil
257
}
258
259
+func envForDaemon(n int) []string {
260
+ envs := os.Environ()
261
+ npath := "IPFS_PATH=" + IpfsDirN(n)
262
+ for i, e := range envs {
263
+ p := strings.Split(e, "=")
264
+ if p[0] == "IPFS_PATH" {
265
+ envs[i] = npath
266
+ return envs
267
+ }
268
+ }
269
+
270
+ return append(envs, npath)
271
+}
272
+
273
func IpfsStart(waitall bool) error {
274
var addrs []string
275
n := GetNumNodes()
@@ -257,7 +277,7 @@ func IpfsStart(waitall bool) error {
277
dir := IpfsDirN(i)
278
cmd := exec.Command("ipfs", "daemon")
279
cmd.Dir = dir
260
- cmd.Env = append(os.Environ(), "IPFS_PATH="+dir)
280
+ cmd.Env = envForDaemon(i)
281
282
cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true}
283
@@ -441,6 +461,11 @@ func IpfsShell(n int) error {
461
}
462
463
func ConnectNodes(from, to int) error {
464
+ if from == to {
465
+ // skip connecting to self..
466
+ return nil
467
+ }
468
+ fmt.Printf("connecting %d -> %d\n", from, to)
469
cmd := exec.Command("ipfs", "id", "-f", "<addrs>")
470
cmd.Env = []string{"IPFS_PATH=" + IpfsDirN(to)}
471
out, err := cmd.Output()
@@ -449,7 +474,6 @@ func ConnectNodes(from, to int) error {
474
return err
475
}
476
addr := strings.Split(string(out), "\n")[0]
452
- fmt.Println("ADDR: ", addr)
477
478
connectcmd := exec.Command("ipfs", "swarm", "connect", addr)
479
connectcmd.Env = []string{"IPFS_PATH=" + IpfsDirN(from)}
@@ -461,6 +485,55 @@ func ConnectNodes(from, to int) error {
485
return nil
486
}
487
488
+func parseRange(s string) ([]int, error) {
489
+ if strings.HasPrefix(s, "[") && strings.HasSuffix(s, "]") {
490
+ ranges := strings.Split(s[1:len(s)-1], ",")
491
+ var out []int
492
+ for _, r := range ranges {
493
+ rng, err := expandDashRange(r)
494
+ if err != nil {
495
+ return nil, err
496
+ }
497
+
498
+ out = append(out, rng...)
499
+ }
500
+ return out, nil
501
+ } else {
502
+ i, err := strconv.Atoi(s)
503
+ if err != nil {
504
+ return nil, err
505
+ }
506
+
507
+ return []int{i}, nil
508
+ }
509
+}
510
+
511
+func expandDashRange(s string) ([]int, error) {
512
+ parts := strings.Split(s, "-")
513
+ if len(parts) == 0 {
514
+ i, err := strconv.Atoi(s)
515
+ if err != nil {
516
+ return nil, err
517
+ }
518
+ return []int{i}, nil
519
+ }
520
+ low, err := strconv.Atoi(parts[0])
521
+ if err != nil {
522
+ return nil, err
523
+ }
524
+
525
+ hi, err := strconv.Atoi(parts[1])
526
+ if err != nil {
527
+ return nil, err
528
+ }
529
+
530
+ var out []int
531
+ for i := low; i <= hi; i++ {
532
+ out = append(out, i)
533
+ }
534
+ return out, nil
535
+}
536
+
537
func GetAttr(attr string, node int) (string, error) {
538
switch attr {
539
case "id":
@@ -518,9 +591,10 @@ func main() {
591
cfg := new(initCfg)
592
kingpin.Flag("n", "number of ipfs nodes to initialize").Short('n').IntVar(&cfg.Count)
593
kingpin.Flag("port", "port to start allocations from").Default("4002").Short('p').IntVar(&cfg.PortStart)
521
- kingpin.Flag("f", "force initialization (overwrite existing configs)").BoolVar(&cfg.Force)
594
+ kingpin.Flag("force", "force initialization (overwrite existing configs)").Short('f').BoolVar(&cfg.Force)
595
kingpin.Flag("mdns", "turn on mdns for nodes").BoolVar(&cfg.Mdns)
596
kingpin.Flag("bootstrap", "select bootstrapping style for cluster").Default("star").StringVar(&cfg.Bootstrap)
597
+ kingpin.Flag("utp", "use utp for addresses").BoolVar(&cfg.Utp)
598
599
wait := kingpin.Flag("wait", "wait for nodes to come fully online before exiting").Bool()
600
@@ -576,22 +650,26 @@ func main() {
650
os.Exit(1)
651
}
652
579
- from, err := strconv.Atoi(args[1])
653
+ from, err := parseRange(args[1])
654
if err != nil {
655
fmt.Printf("failed to parse: %s\n", err)
656
return
657
}
658
585
- to, err := strconv.Atoi(args[2])
659
+ to, err := parseRange(args[2])
660
if err != nil {
661
fmt.Printf("failed to parse: %s\n", err)
662
return
663
}
664
591
- err = ConnectNodes(from, to)
592
- if err != nil {
593
- fmt.Printf("failed to connect: %s\n", err)
594
- return
665
+ for _, f := range from {
666
+ for _, t := range to {
667
+ err = ConnectNodes(f, t)
668
+ if err != nil {
669
+ fmt.Printf("failed to connect: %s\n", err)
670
+ return
671
+ }
672
+ }
673
}
674
675
case "get":