Skip to content
This repository has been archived by the owner on Sep 12, 2023. It is now read-only.

Commit

Permalink
Reorg tests to support 3.4 and 3.5 clusters
Browse files Browse the repository at this point in the history
travis build for a fork
  • Loading branch information
jeffbean authored and nemith committed Jul 27, 2019
1 parent 5c6e83c commit c1394f4
Show file tree
Hide file tree
Showing 10 changed files with 165 additions and 66 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
.vscode/
.DS_Store
profile.cov
zookeeper-*/
zookeeper-*.tar.gz
13 changes: 7 additions & 6 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
language: go
go:
- 1.10
go_import_path: github.com/samuel/go-zookeeper/zk

jdk:
- oraclejdk9
Expand All @@ -13,20 +14,20 @@ branches:
- dev

before_install:
- wget http://apache.cs.utah.edu/zookeeper/zookeeper-${zk_version}/zookeeper-${zk_version}.tar.gz
- tar -zxvf zookeeper*tar.gz && zip -d zookeeper-${zk_version}/zookeeper-contrib/zookeeper-contrib-fatjar/zookeeper-${zk_version}-fatjar.jar 'META-INF/*.SF' 'META-INF/*.DSA'
- go get github.com/mattn/goveralls
- go get golang.org/x/tools/cmd/cover
- make travis ZK_VERSION=${zk_version}

before_script:
- go vet ./...
- go fmt ./...

script:
- jdk_switcher use oraclejdk9
- go build ./...
- go fmt ./...
- go vet ./...
- go test -i -race ./...
- go test -race -covermode atomic -coverprofile=profile.cov
- goveralls -coverprofile=profile.cov -service=travis-ci

env:
matrix:
- zk_version=3.5.4-beta
- zk_version=3.4.12
18 changes: 18 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# make file to hold the logic of build and test setup
ZK_VERSION ?= 3.5.4-beta

ZK = zookeeper-$(ZK_VERSION)
ZK_URL = "https://archive.apache.org/dist/zookeeper/$(ZK)/$(ZK).tar.gz"

$(ZK):
wget $(ZK_URL)
tar -zxf $(ZK).tar.gz
rm $(ZK).tar.gz

.PHONY: install-test-deps
install-test-deps:
go get github.com/mattn/goveralls
go get golang.org/x/tools/cmd/cover

.PHONY: travis
travis: $(ZK) install-test-deps
11 changes: 6 additions & 5 deletions cluster_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package zk

import (
"os"
"sync"
"testing"
"time"
Expand All @@ -17,7 +18,7 @@ func (lw logWriter) Write(b []byte) (int, error) {
}

func TestBasicCluster(t *testing.T) {
ts, err := StartTestCluster(3, nil, logWriter{t: t, p: "[ZKERR] "})
ts, err := StartTestCluster(t, 3, os.Stdout, logWriter{t: t, p: "[ZKERR] "})
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -47,7 +48,7 @@ func TestBasicCluster(t *testing.T) {

// If the current leader dies, then the session is reestablished with the new one.
func TestClientClusterFailover(t *testing.T) {
tc, err := StartTestCluster(3, nil, logWriter{t: t, p: "[ZKERR] "})
tc, err := StartTestCluster(t, 3, nil, logWriter{t: t, p: "[ZKERR] "})
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -89,7 +90,7 @@ func TestClientClusterFailover(t *testing.T) {
// If a ZooKeeper cluster looses quorum then a session is reconnected as soon
// as the quorum is restored.
func TestNoQuorum(t *testing.T) {
tc, err := StartTestCluster(3, nil, logWriter{t: t, p: "[ZKERR] "})
tc, err := StartTestCluster(t, 3, nil, logWriter{t: t, p: "[ZKERR] "})
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -185,7 +186,7 @@ func TestNoQuorum(t *testing.T) {
}

func TestWaitForClose(t *testing.T) {
ts, err := StartTestCluster(1, nil, logWriter{t: t, p: "[ZKERR] "})
ts, err := StartTestCluster(t, 1, nil, logWriter{t: t, p: "[ZKERR] "})
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -221,7 +222,7 @@ CONNECTED:
}

func TestBadSession(t *testing.T) {
ts, err := StartTestCluster(1, nil, logWriter{t: t, p: "[ZKERR] "})
ts, err := StartTestCluster(t, 1, nil, logWriter{t: t, p: "[ZKERR] "})
if err != nil {
t.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion conn_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ func TestRecurringReAuthHang(t *testing.T) {
}
}()

zkC, err := StartTestCluster(2, ioutil.Discard, ioutil.Discard)
zkC, err := StartTestCluster(t, 2, ioutil.Discard, ioutil.Discard)
if err != nil {
panic(err)
}
Expand Down
4 changes: 2 additions & 2 deletions dnshostprovider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ func localhostLookupHost(host string) ([]string, error) {
// TestDNSHostProviderCreate is just like TestCreate, but with an
// overridden HostProvider that ignores the provided hostname.
func TestDNSHostProviderCreate(t *testing.T) {
ts, err := StartTestCluster(1, nil, logWriter{t: t, p: "[ZKERR] "})
ts, err := StartTestCluster(t, 1, nil, logWriter{t: t, p: "[ZKERR] "})
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -97,7 +97,7 @@ var _ HostProvider = &localHostPortsFacade{}
// remaps addresses to localhost:$PORT combinations corresponding to
// the test ZooKeeper instances.
func TestDNSHostProviderReconnect(t *testing.T) {
ts, err := StartTestCluster(3, nil, logWriter{t: t, p: "[ZKERR] "})
ts, err := StartTestCluster(t, 3, nil, logWriter{t: t, p: "[ZKERR] "})
if err != nil {
t.Fatal(err)
}
Expand Down
5 changes: 3 additions & 2 deletions lock_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
)

func TestLock(t *testing.T) {
ts, err := StartTestCluster(1, nil, logWriter{t: t, p: "[ZKERR] "})
ts, err := StartTestCluster(t, 1, nil, logWriter{t: t, p: "[ZKERR] "})
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -64,11 +64,12 @@ func TestLock(t *testing.T) {
// This tests creating a lock with a path that's more than 1 node deep (e.g. "/test-multi-level/lock"),
// when a part of that path already exists (i.e. "/test-multi-level" node already exists).
func TestMultiLevelLock(t *testing.T) {
ts, err := StartTestCluster(1, nil, logWriter{t: t, p: "[ZKERR] "})
ts, err := StartTestCluster(t, 1, nil, logWriter{t: t, p: "[ZKERR] "})
if err != nil {
t.Fatal(err)
}
defer ts.Stop()

zk, _, err := ts.ConnectAll()
if err != nil {
t.Fatalf("Connect returned error: %+v", err)
Expand Down
56 changes: 47 additions & 9 deletions server_help.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ import (
"math/rand"
"os"
"path/filepath"
"strconv"
"strings"
"testing"
"time"
)

Expand All @@ -18,19 +20,41 @@ func init() {
type TestServer struct {
Port int
Path string
Srv *Server
Srv *server
}

type TestCluster struct {
Path string
Servers []TestServer
}

func StartTestCluster(size int, stdout, stderr io.Writer) (*TestCluster, error) {
func StartTestCluster(t *testing.T, size int, stdout, stderr io.Writer) (*TestCluster, error) {
if testing.Short() {
t.Skip("ZK clsuter tests skipped in short case.")
}
var (
version int
err error
)
// this will be set by systems like travis_ci to be able to test multiple versions
testingServerVersion := os.Getenv("zk_version")
if testingServerVersion != "" {
// will look like a semver ie. 3.4.1 or 3.5.4-beta
parts := strings.Split(testingServerVersion, ".")
if len(parts) >= 2 {
// minor version we switch on
version, err = strconv.Atoi(parts[1])
if err != nil {
t.Fatalf("failed to detect zk minor version from environment: %v", err)
}
}
}

tmpPath, err := ioutil.TempDir("", "gozk")
if err != nil {
return nil, err
t.Fatalf("failed to create tmp fir for test server setup: %v", err)
}

success := false
startPort := int(rand.Int31n(6000) + 10000)
cluster := &TestCluster{Path: tmpPath}
Expand All @@ -42,8 +66,9 @@ func StartTestCluster(size int, stdout, stderr io.Writer) (*TestCluster, error)
for serverN := 0; serverN < size; serverN++ {
srvPath := filepath.Join(tmpPath, fmt.Sprintf("srv%d", serverN))
if err := os.Mkdir(srvPath, 0700); err != nil {
return nil, err
t.Fatalf("failed to make server path: %v", err)
}

port := startPort + serverN*3
cfg := ServerConfig{
ClientPort: port,
Expand All @@ -57,6 +82,7 @@ func StartTestCluster(size int, stdout, stderr io.Writer) (*TestCluster, error)
LeaderElectionPort: startPort + i*3 + 2,
})
}

cfgPath := filepath.Join(srvPath, "zoo.cfg")
fi, err := os.Create(cfgPath)
if err != nil {
Expand All @@ -78,23 +104,35 @@ func StartTestCluster(size int, stdout, stderr io.Writer) (*TestCluster, error)
return nil, err
}

srv := &Server{
ConfigPath: cfgPath,
Stdout: stdout,
Stderr: stderr,
var srv *server
if version == 0 || version < 5 {
// we default assume we want a 3.4 cluster
srv, err = New3dot4TestServer(t, cfgPath, stdout, stderr)
if err != nil {
return nil, err
}
} else {
srv, err = New3dot5TestServer(t, cfgPath, stdout, stderr)
if err != nil {
return nil, err
}
}

if err := srv.Start(); err != nil {
return nil, err
}

cluster.Servers = append(cluster.Servers, TestServer{
Path: srvPath,
Port: cfg.ClientPort,
Srv: srv,
})
}
if err := cluster.waitForStart(10, time.Second); err != nil {

if err := cluster.waitForStart(20, time.Second); err != nil {
return nil, err
}

success = true
return cluster, nil
}
Expand Down
Loading

0 comments on commit c1394f4

Please sign in to comment.