blob: d7553e7df5d37494ce9320e13bcb818b42faf817 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package getty
import (
"path/filepath"
"testing"
"time"
)
import (
"github.com/stretchr/testify/assert"
)
func testTCPServer(t *testing.T, address string) {
var (
server *server
serverMsgHandler MessageHandler
)
func() {
server = newServer(
TCP_SERVER,
WithLocalAddress(address),
)
newServerSession := func(session Session) error {
return newSessionCallback(session, &serverMsgHandler)
}
server.RunEventLoop(newServerSession)
assert.True(t, server.ID() > 0)
assert.True(t, server.EndPointType() == TCP_SERVER)
assert.NotNil(t, server.streamListener)
}()
time.Sleep(500e6)
addr := server.streamListener.Addr().String()
t.Logf("@address:%s, tcp server addr: %v", address, addr)
clt := newClient(TCP_CLIENT,
WithServerAddress(addr),
WithReconnectInterval(5e8),
WithConnectionNumber(1),
)
assert.NotNil(t, clt)
assert.True(t, clt.ID() > 0)
assert.Equal(t, clt.endPointType, TCP_CLIENT)
var msgHandler MessageHandler
cb := func(session Session) error {
return newSessionCallback(session, &msgHandler)
}
clt.RunEventLoop(cb)
time.Sleep(1e9)
assert.Equal(t, 1, msgHandler.SessionNumber())
clt.Close()
assert.True(t, clt.IsClosed())
server.Close()
assert.True(t, server.IsClosed())
}
func testTCPTlsServer(t *testing.T, address string) {
var (
server *server
serverMsgHandler MessageHandler
)
serverPemPath, _ := filepath.Abs("./demo/hello/tls/certs/server0.pem")
serverKeyPath, _ := filepath.Abs("./demo/hello/tls/certs/server0.key")
caPemPath, _ := filepath.Abs("./demo/hello/tls/certs/ca.pem")
configBuilder := &ServerTlsConfigBuilder{
ServerKeyCertChainPath: serverPemPath,
ServerPrivateKeyPath: serverKeyPath,
ServerTrustCertCollectionPath: caPemPath,
}
func() {
server = newServer(
TCP_SERVER,
WithLocalAddress(address),
WithServerSslEnabled(true),
WithServerTlsConfigBuilder(configBuilder),
)
newServerSession := func(session Session) error {
return newSessionCallback(session, &serverMsgHandler)
}
server.RunEventLoop(newServerSession)
assert.True(t, server.ID() > 0)
assert.True(t, server.EndPointType() == TCP_SERVER)
assert.NotNil(t, server.streamListener)
}()
time.Sleep(500e6)
addr := server.streamListener.Addr().String()
t.Logf("@address:%s, tcp server addr: %v", address, addr)
keyPath, _ := filepath.Abs("./demo/hello/tls/certs/ca.key")
clientCaPemPath, _ := filepath.Abs("./demo/hello/tls/certs/ca.pem")
clientConfig := &ClientTlsConfigBuilder{
ClientTrustCertCollectionPath: clientCaPemPath,
ClientPrivateKeyPath: keyPath,
}
clt := newClient(TCP_CLIENT,
WithServerAddress(addr),
WithReconnectInterval(5e8),
WithConnectionNumber(1),
WithClientTlsConfigBuilder(clientConfig),
)
assert.NotNil(t, clt)
assert.True(t, clt.ID() > 0)
assert.Equal(t, clt.endPointType, TCP_CLIENT)
var msgHandler MessageHandler
cb := func(session Session) error {
return newSessionCallback(session, &msgHandler)
}
clt.RunEventLoop(cb)
time.Sleep(1e9)
assert.Equal(t, 1, msgHandler.SessionNumber())
clt.Close()
assert.True(t, clt.IsClosed())
server.Close()
assert.True(t, server.IsClosed())
}
func testUDPServer(t *testing.T, address string) {
var (
server *server
serverMsgHandler MessageHandler
)
func() {
server = newServer(
UDP_ENDPOINT,
WithLocalAddress(address),
)
newServerSession := func(session Session) error {
return newSessionCallback(session, &serverMsgHandler)
}
server.RunEventLoop(newServerSession)
assert.True(t, server.ID() > 0)
assert.True(t, server.EndPointType() == UDP_ENDPOINT)
assert.NotNil(t, server.pktListener)
}()
time.Sleep(500e6)
addr := server.pktListener.LocalAddr().String()
t.Logf("@address:%s, udp server addr: %v", address, addr)
}
func TestServer(t *testing.T) {
var addr string
testTCPServer(t, addr)
testUDPServer(t, addr)
addr = "127.0.0.1:0"
testTCPServer(t, addr)
testUDPServer(t, addr)
addr = "127.0.0.1"
testTCPServer(t, addr)
testUDPServer(t, addr)
addr = "127.0.0.9999"
testTCPTlsServer(t, addr)
}