コード例 #1
0
ファイル: nats_rpc_test.go プロジェクト: nats-io/graft
func TestNatsLeaderElection(t *testing.T) {
	s := test.RunServer(&test.DefaultTestOptions)
	defer s.Shutdown()

	toStart := 5
	nodes := createNatsNodes(t, "nats_test", toStart)

	// Do cleanup
	for _, n := range nodes {
		defer n.Close()
	}

	// Wait for Election
	expectedClusterState(t, nodes, 1, toStart-1, 0)

	// Make sure he stays the leader (heartbeat functionality)
	leader := findLeader(nodes)

	// Wait for Election timout
	time.Sleep(MAX_ELECTION_TIMEOUT)

	if newLeader := findLeader(nodes); newLeader != leader {
		t.Fatalf("Expected leader to keep power, was %q, now %q\n",
			leader.Id(), newLeader.Id())
	}

	// Now close the leader, make sure someone else gets elected
	leader.Close()

	// Wait for Election
	expectedClusterState(t, nodes, 1, toStart-2, 0)
}
コード例 #2
0
ファイル: toputils_test.go プロジェクト: lparis/nats-top
func runMonitorServer(monitorPort int) *server.Server {
	resetPreviousHTTPConnections()
	opts := gnatsd.DefaultTestOptions
	opts.Host = "127.0.0.1"
	opts.Port = GNATSD_PORT
	opts.HTTPPort = monitorPort

	return gnatsd.RunServer(&opts)
}
コード例 #3
0
ファイル: nats_rpc_test.go プロジェクト: wallyqs/graft
func TestNatsLeaderElection(t *testing.T) {
	test.RunServer(&test.DefaultTestOptions)

	toStart := 5
	nodes := createNatsNodes(t, "nats_test", toStart)

	// Do cleanup
	for _, n := range nodes {
		defer n.Close()
	}

	// Wait for Election
	time.Sleep(MAX_ELECTION_TIMEOUT)

	leaders, followers, candidates := countTypes(nodes)

	if leaders != 1 {
		t.Fatalf("Expected 1 Leader, got %d\n", leaders)
	}
	if followers != toStart-1 {
		t.Fatalf("Expected %d Followers, got %d\n", toStart-1, followers)
	}
	if candidates != 0 {
		t.Fatalf("Expected 0 Candidates, got %d\n", candidates)
	}

	// Make sure he stays the leader (heartbeat functionality)
	leader := findLeader(nodes)

	// Wait for Election timout
	time.Sleep(MAX_ELECTION_TIMEOUT)

	if newLeader := findLeader(nodes); newLeader != leader {
		t.Fatalf("Expected leader to keep power, was %q, now %q\n",
			leader.Id(), newLeader.Id())
	}

	// Now close the leader, make sure someone else gets elected
	leader.Close()

	// Wait for Election
	time.Sleep(MAX_ELECTION_TIMEOUT)

	leaders, followers, candidates = countTypes(nodes)

	if leaders != 1 {
		t.Fatalf("Expected 1 Leader, got %d\n", leaders)
	}
	if followers != toStart-2 {
		t.Fatalf("Expected %d Followers, got %d\n", toStart-2, followers)
	}
	if candidates != 0 {
		t.Fatalf("Expected 0 Candidates, got %d\n", candidates)
	}
}
コード例 #4
0
ファイル: gnatsd.go プロジェクト: csigo/test
func (s *gnatsdService) Start() (int, error) {
	// perform default check
	opts := gnatsdtest.DefaultTestOptions
	opts.Port = gnatsd.RANDOM_PORT
	s.gnatsd = gnatsdtest.RunServer(&opts)
	addr := s.gnatsd.Addr()
	_, port, _ := net.SplitHostPort(addr.String())
	gnatsdPort, _ := strconv.Atoi(port)

	return gnatsdPort, nil
}
コード例 #5
0
func TestMain(m *testing.M) {
	var err error
	gnatsd := test.RunServer(&TestOptions)
	defer gnatsd.Shutdown()
	options := DefaultOptions
	options.Servers = []string{DefaultURL}
	if gnatsd != nil {
		bq, err = NewBasicQueue(&options, DefaultEncoder)
		if err != nil {
			panic(err)
		}
	} else {
		panic("Could not start NATS queue")
	}
	ret := m.Run()
	os.Exit(ret)
}
コード例 #6
0
ファイル: test.go プロジェクト: qinguoan/vulcan
func RunServerWithOptions(opts server.Options) *server.Server {
	return gnatsd.RunServer(&opts)
}
コード例 #7
0
ファイル: archiver_test.go プロジェクト: glycerine/tmframe
func Test003ArchiverAcknowledgesStorage(t *testing.T) {

	cv.Convey("given a running gnatsd, the archiver should store messages to disk and acknowledge their storage on the 'servicename.storage-ack.(hostname)' subject.", t, func() {

		user := "******"
		pw := "password"
		host := "127.0.0.1"
		port := 4444
		serverList := fmt.Sprintf("nats://%v:%v@%v:%v", user, pw, host, port)

		// start yourself an embedded gnatsd server
		opts := server.Options{
			Host:     host,
			Port:     port,
			Username: user,
			Password: pw,
			Trace:    true,
			Debug:    true,
			//NoLog:  true,
			//NoSigs: true,
		}
		gnats := gnatsd.RunServer(&opts)
		gnats.SetLogger(&Logger{}, true, true)

		//logger := log.New(os.Stderr, "gnatsd: ", log.LUTC|log.Ldate|log.Ltime|log.Lmicroseconds|log.Llongfile)
		defer func() {
			p("calling gnats.Shutdown()")
			gnats.Shutdown() // when done
		}()
		addr := fmt.Sprintf("%v:%v", host, port)
		if !PortIsBound(addr) {
			panic("port not bound " + addr)
		}

		// start client
		asyncHandler := nats.ErrorHandler(func(c *nats.Conn, s *nats.Subscription, e error) {
			fmt.Printf("\n *** async error handler sees error: '%s'\n", e)
			panic(e)
		})
		p("about to connect with client")
		nc, err := nats.Connect(serverList, asyncHandler)
		panicOn(err)
		defer nc.Close()

		// prep data
		p("prepping data")
		streamName := "test"
		data1 := []byte("data1")

		tm1, err := time.Parse(time.RFC3339, "2016-01-01T00:00:00Z")
		panicOn(err)

		frame1, err := ts.NewFrame(tm1, ts.EvUtf8, 0, 0, data1)
		panicOn(err)
		framed, err := frame1.Marshal(nil)
		panicOn(err)

		// subscribe to reply in advance of publishing archive request
		gotAck := make(chan *nats.Msg)
		nc.Subscribe(ServiceName+".storage-ack.>", func(msgNats *nats.Msg) {
			p(ServiceName+".storage-ack received msg: '%#v'", msgNats)
			select {
			case <-gotAck:
				// already closed; don't do it again
				p(ServiceName + ".storage-ack already closed, skipping this time")
			default:
				p(ServiceName + ".storage-ack closing gotAck")
				close(gotAck)
			}
		})

		// start an archiver to catch our request
		tmp, err := ioutil.TempDir("", "test-archiver-filemgr")
		panicOn(err)
		defer os.RemoveAll(tmp)
		fm := NewFileMgr(&ArchiverConfig{WriteDir: tmp,
			ServerList: serverList})
		go func() {
			err := fm.Run()
			panicOn(err)
		}()
		<-fm.Ready
		p("archiver_test: fm.Ready received")
		defer fm.Stop()

		// make the achiving request: write data to server
		subj := ServiceName + ".archive." + streamName

		err = nc.Publish(subj, framed)
		if err != nil {
			panic(fmt.Errorf("Got an error on nc.Publish(): %+v\n", err))
		}
		nc.Flush()
		p("Published to subject '%s' %v bytes", subj, len(framed))
		reply, err := nc.Request(subj, framed, 1000*time.Millisecond)
		if err != nil {
			p("\n ----------->>>>>>> Request got err back: '%s'\n", err)
			panic(fmt.Errorf("Error in Request: %v\n", err))
		}
		p("003ArchiverAck test sent request, got reply: '%#v' with Data '%s'", reply, string(reply.Data))
		cv.So(strings.HasPrefix(reply.Subject, "_INBOX."), cv.ShouldBeTrue)
		// verify reply or panic after timeout
		timeout := 2 * time.Second
		select {
		case <-gotAck:
			// cool
			p("successfully got ack!")
		case <-time.After(timeout):
			panic(fmt.Errorf("timeout after %v waiting for reply", timeout))
		}
	})
}