func main() {
	var args []string
	var numNodes int
	var firstPort int
	var seed int64
	flag.IntVar(&numNodes, "n", 10, "number of nodes to generate")
	flag.IntVar(&firstPort, "p", 8000, "port to assign first DryMartini to listen on (continguous range for remaining DM's)")
	flag.Int64Var(&seed, "s", time.Now().UnixNano(), "seed to use for random generation")
	flag.Parse()
	args = flag.Args()

	rand.Seed(seed) //seed generic rand anyway, cause i'm too lazy to refactor everything to use the rand generated here. and we still want randomness, even at the expense of easy replication of errors
	log.Printf("using seed:%d\n", seed)
	numNodes = strConv(args[0])
	firstPort = strConv(args[1])
	log.Printf("Running tests: numNodes:%d\n", numNodes)
	kademlia.TestStartTime = time.Now().Local()
	logfile, err := os.Create("./logs/complete_log_" + kademlia.TestStartTime.String())
	if err != nil {
		log.Printf("error creating main log:%s\n", err)
		panic(1)
	}
	dbg.InitDbgOut(logfile)

	//instantiate
	var dm *drymartini.DryMartini
	listenStr := string(strconv.AppendInt([]byte("localhost:"), int64(firstPort-1), 10))
	dm = drymartini.NewDryMartini(listenStr, 4096)

	drymartini.RunTests(dm, numNodes, firstPort, seed, 4, 4)
	log.Printf("seed was:%d\n", seed)
}
Example #2
0
func main() {
	var err error
	var listenStr = flag.String("proxy", "8888", "Proxy listen port (the port you point your browser to)")
	var dmListenStr = flag.String("d", "localhost:8000", "DryMartini listen address")
	var connectStr = flag.String("c", "", "DryMartini node to connect to")
	var isTest = flag.Bool("test", false, "Indicate this node will be used for running test suite")
	var seed int64
	flag.Int64Var(&seed, "s", time.Now().UnixNano(), "seed to use for random generation")

	// Get the bind and connect connection strings from command-line arguments.

	flag.Parse()

	log.Printf("proxy listening on:%s\n", *listenStr)
	log.Printf("DryMartini opening on:%s\n", *dmListenStr)
	log.Printf("DryMartini node connecting to:%s\n", *connectStr)
	log.Printf("is Test:%t\n", *isTest)

	kademlia.RunningTests = *isTest
	kademlia.TestStartTime = time.Now().Local()
	err = os.Mkdir("./logs/", os.ModeDir)
	logfile, err := os.Create("./logs/complete_log_" + kademlia.TestStartTime.String())
	if err != nil {
		log.Printf("error creating main log:%s\n", err)
		panic(1)
	}
	dbg.InitDbgOut(logfile)

	rand.Seed(seed)

	//instantiate
	myDryMartini = drymartini.NewDryMartini(*dmListenStr, 4096)

	if *connectStr != "" {
		success, err := MakePing(myDryMartini, *connectStr)
		if !success {
			log.Printf("connect to %s failed. err:%s\n", connectStr, err)
			panic(1)
		}
		drymartini.DoJoin(myDryMartini)
	}

	/*
		host, port, errr := kademlia.AddrStrToHostPort(connectStr)
		var swarm []*drymartini.DryMartini = drymartini.MakeSwarm(8, int(port))
		drymartini.WarmSwarm(myDryMartini, swarm)
	*/

	kademlia.PrintLocalBuckets(myDryMartini.KademliaInst)

	proxy := goproxy.NewProxyHttpServer()
	proxy.OnRequest().DoFunc(DoHTTPRequest)
	log.Fatal(http.ListenAndServe(":"+*listenStr, proxy))
	/*
			var stdInReader *bufio.Reader = bufio.NewReader(os.Stdin)
			var instStr string
			var inst *DryMartiniInstruction
			for ;; {
				fmt.Printf("δώσε:")//Print prompt

		        //read new instruction
				//ret, err := fmt.Scanln(&instStr)
				instStr, err = stdInReader.ReadString('\n')
				if err != nil {
					log.Printf("Error at Scanf: %s\n", err)
					panic(1)
				}

				//parse line input and create command struct
				inst = NewDryMartiniInstruction(instStr)

				if inst.IsExit() {
					log.Printf("DryMartini exiting.\n\n\nOne for the road, maybe?");
					break;
				}

				//execute new instruction
				inst.Execute(myDryMartini)

				if (myDryMartini.KademliaInst.DoJoinFlag) {
					log.Printf("DoingJoin!\n")
					go drymartini.DoJoin(myDryMartini)
				}
			}
	*/
	log.Printf("end of main\n")
}
func main() {
	var numNodes = flag.Int("n", 10, "number of nodes to create for test")
	var firstPort = flag.Int("p", 8000, "port for first node in test swarm to listen on")
	var seed = flag.Int64("seed", time.Now().UnixNano(), "seed to use for random gen")

	flag.Parse()
	rand.Seed(*seed) //seed generic rand anyway, cause i'm too lazy to refactor everything to use the rand generated here. and we still want randomness, even at the expense of easy replication of errors
	log.Printf("using seed:%d\n", *seed)
	log.Printf("Running tests: numNodes:%d\n", *numNodes)
	kademlia.TestStartTime = time.Now().Local()
	err := os.MkdirAll(fileDirStr, os.ModeDir|os.ModePerm)

	var logfile *os.File
	logfile, err = os.Create(fileDirStr + "/complete_log_" + kademlia.TestStartTime.String())
	if err != nil {
		log.Printf("error creating main log:%s\n", err)
		panic(1)
	}
	dbg.InitDbgOut(logfile)

	var outfiles []*os.File
	outfiles = initOutputFiles(*numNodes)

	cmds := make([]*exec.Cmd, *numNodes, *numNodes)
	//	cmds[0] = exec.Command("../../bin/main", "localhost:"+strconv.Itoa(*firstPort))
	//var out bytes.Buffer
	/*
		cmds[0].Stdin = strings.NewReader("ping localhost:"+strconv.Itoa(*firstPort -1))
		cmds[0].Stdout = outfiles[0]
		cmds[0].Stderr = outfiles[0]
	*/

	//	err = cmds[0].Start()
	//	log.Printf("first node started!\n")
	for i := 0; i < *numNodes; i++ {
		cmds[i] = exec.Command("../../bin/main", "localhost:"+strconv.Itoa((*firstPort)+i))
		cmds[i].Stdout = os.Stdout
		cmds[i].Stderr = outfiles[i]
		//generate cmd sequence for DM's
		cmds[i].Stdin = drymartini.GenerateDmCmdSeq(fileDirStr, *firstPort, *numNodes, (*firstPort)+i)
		//cmds[i].Stdin = file.open("ping localhost:"+strconv.Itoa(*firstPort -1))
		err = cmds[i].Start()
		if err != nil {
			log.Printf("error running cmd:%s\n", err)
			panic(1)
		}
		log.Printf("node:%d started!\n", i)
	}
	for i := 0; i < *numNodes; i++ {
		log.Printf("%d nodes finished\n", i)
		err = cmds[i].Wait()
		if err != nil {
			log.Printf("node number:%d finished with error:%s\n", i, err.Error())
		}
	}
	/*
			//instantiate
			var dm *drymartini.DryMartini
			listenStr := string(strconv.AppendInt([]byte("localhost:"), int64(firstPort-1), 10))
		    dm = drymartini.NewDryMartini(listenStr, 4096)

			drymartini.RunTests(dm, numNodes, firstPort, seed, 4, 4)
			log.Printf("seed was:%d\n", seed)
	*/
}