Skip to content

Commit

Permalink
add unregister test
Browse files Browse the repository at this point in the history
  • Loading branch information
高辛格 committed Aug 23, 2019
1 parent f73ee62 commit 21d7b15
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 42 deletions.
2 changes: 1 addition & 1 deletion examples/consul/go-server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ func initSignal() {
os.Exit(1)
})

// 要么fastFailTimeout时间内执行完毕下面的逻辑然后程序退出,要么执行上面的超时函数程序强行退出
// The program exits normally or timeout forcibly exits.
fmt.Println("provider app exit now...")
return
}
Expand Down
7 changes: 6 additions & 1 deletion registry/consul/listener_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,13 @@ import (
"github.com/stretchr/testify/assert"
)

func (suite *ConsulRegistryTestSuite) testListener() {
import (
"github.com/apache/dubbo-go/remoting"
)

func (suite *consulRegistryTestSuite) testListener(action remoting.EventType) {
event, err := suite.listener.Next()
assert.NoError(suite.t, err)
assert.Equal(suite.t, action, event.Action)
assert.True(suite.t, suite.providerUrl.URLEqual(event.Service))
}
23 changes: 14 additions & 9 deletions registry/consul/registry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,31 +21,36 @@ import (
"github.com/stretchr/testify/assert"
)

func (suite *ConsulRegistryTestSuite) testNewProviderRegistry() {
func (suite *consulRegistryTestSuite) testNewProviderRegistry() {
providerRegistryUrl := newProviderRegistryUrl(registryHost, registryPort)
providerRegistry, err := newConsulRegistry(providerRegistryUrl)
assert.NoError(suite.t, err)
suite.providerRegistry = providerRegistry
}

func (suite *ConsulRegistryTestSuite) testSubscribe() {
server := newServer(providerHost, providerPort)
suite.server = server
func (suite *consulRegistryTestSuite) testNewConsumerRegistry() {
consumerRegistryUrl := newConsumerRegistryUrl(registryHost, registryPort)
consumerRegistry, err := newConsulRegistry(consumerRegistryUrl)
assert.NoError(suite.t, err)
suite.consumerRegistry = consumerRegistry
}

func (suite *consulRegistryTestSuite) testRegister() {
providerUrl := newProviderUrl(providerHost, providerPort, service, protocol)
suite.providerUrl = providerUrl
err := suite.providerRegistry.Register(providerUrl)
assert.NoError(suite.t, err)
}

func (suite *ConsulRegistryTestSuite) testNewConsumerRegistry() {
consumerRegistryUrl := newConsumerRegistryUrl(registryHost, registryPort)
consumerRegistry, err := newConsulRegistry(consumerRegistryUrl)
func (suite *consulRegistryTestSuite) testUnregister() {
consulProviderRegistry, _ := suite.providerRegistry.(*consulRegistry)
err := consulProviderRegistry.Unregister(suite.providerUrl)
assert.NoError(suite.t, err)
suite.consumerRegistry = consumerRegistry
}

func (suite *ConsulRegistryTestSuite) testRegister() {
func (suite *consulRegistryTestSuite) testSubscribe() {
consumerUrl := newConsumerUrl(consumerHost, consumerPort, service, protocol)
suite.consumerUrl = consumerUrl
listener, err := suite.consumerRegistry.Subscribe(consumerUrl)
assert.NoError(suite.t, err)
suite.listener = listener
Expand Down
108 changes: 77 additions & 31 deletions registry/consul/utils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import (
"github.com/apache/dubbo-go/common"
"github.com/apache/dubbo-go/common/constant"
"github.com/apache/dubbo-go/registry"
"github.com/apache/dubbo-go/remoting"
)

var (
Expand Down Expand Up @@ -89,18 +90,46 @@ func newConsumerUrl(host string, port int, service string, protocol string) comm
return *url1
}

type Server struct {
type testConsulAgent struct {
dataDir string
testAgent *agent.TestAgent
}

func newConsulAgent(t *testing.T, port int) *testConsulAgent {
dataDir, _ := ioutil.TempDir("./", "agent")
hcl := `
ports {
http = ` + strconv.Itoa(port) + `
}
data_dir = "` + dataDir + `"
`
testAgent := &agent.TestAgent{Name: t.Name(), DataDir: dataDir, HCL: hcl}
testAgent.Start(t)

consulAgent := &testConsulAgent{
dataDir: dataDir,
testAgent: testAgent,
}
return consulAgent
}

func (consulAgent *testConsulAgent) close() {
consulAgent.testAgent.Shutdown()
os.RemoveAll(consulAgent.dataDir)
}

type testServer struct {
listener net.Listener
wg sync.WaitGroup
done chan struct{}
}

func newServer(host string, port int) *Server {
func newServer(host string, port int) *testServer {
addr := fmt.Sprintf("%s:%d", host, port)
tcpAddr, _ := net.ResolveTCPAddr("tcp", addr)
listener, _ := net.ListenTCP("tcp", tcpAddr)

server := &Server{
server := &testServer{
listener: listener,
done: make(chan struct{}),
}
Expand All @@ -110,7 +139,7 @@ func newServer(host string, port int) *Server {
return server
}

func (server *Server) serve() {
func (server *testServer) serve() {
defer server.wg.Done()
for {
select {
Expand All @@ -127,54 +156,71 @@ func (server *Server) serve() {
}
}

func (server *Server) close() {
func (server *testServer) close() {
close(server.done)
server.listener.Close()
server.wg.Wait()
}

type ConsulRegistryTestSuite struct {
type consulRegistryTestSuite struct {
t *testing.T
dataDir string
consulAgent *agent.TestAgent
providerRegistry registry.Registry
consumerRegistry registry.Registry
listener registry.Listener
providerUrl common.URL
server *Server
consumerUrl common.URL
}

func newConsulRegistryTestSuite(t *testing.T) *ConsulRegistryTestSuite {
dataDir, _ := ioutil.TempDir("./", "agent")
hcl := `
ports {
http = ` + strconv.Itoa(registryPort) + `
}
data_dir = "` + dataDir + `"
`
consulAgent := &agent.TestAgent{Name: t.Name(), DataDir: dataDir, HCL: hcl}
consulAgent.Start(t)

suite := &ConsulRegistryTestSuite{
t: t,
dataDir: dataDir,
consulAgent: consulAgent,
}
func newConsulRegistryTestSuite(t *testing.T) *consulRegistryTestSuite {
suite := &consulRegistryTestSuite{t: t}
return suite
}

func (suite *ConsulRegistryTestSuite) close() {
suite.server.close()
suite.consulAgent.Shutdown()
os.RemoveAll(suite.dataDir)
func (suite *consulRegistryTestSuite) close() {
suite.listener.Close()
suite.providerRegistry.Destroy()
suite.consumerRegistry.Destroy()
}

func TestConsulRegistry(t *testing.T) {
// register -> subscribe -> unregister
func test1(t *testing.T) {
consulAgent := newConsulAgent(t, registryPort)
defer consulAgent.close()

server := newServer(providerHost, providerPort)
defer server.close()

suite := newConsulRegistryTestSuite(t)
defer suite.close()

suite.testNewProviderRegistry()
suite.testRegister()
suite.testNewConsumerRegistry()
suite.testSubscribe()
suite.testListener(remoting.EventTypeAdd)
suite.testUnregister()
suite.testListener(remoting.EventTypeDel)
}

// subscribe -> register
func test2(t *testing.T) {
consulAgent := newConsulAgent(t, registryPort)
defer consulAgent.close()

server := newServer(providerHost, providerPort)
defer server.close()

suite := newConsulRegistryTestSuite(t)
defer suite.close()

suite.testNewConsumerRegistry()
suite.testSubscribe()
suite.testNewProviderRegistry()
suite.testRegister()
suite.testListener()
suite.testListener(remoting.EventTypeAdd)
}

func TestConsulRegistry(t *testing.T) {
t.Run("test1", test1)
t.Run("test2", test2)
}

0 comments on commit 21d7b15

Please sign in to comment.