2018-03-29 00:35:02 -04:00
|
|
|
package domainsocket_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"net"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"v2ray.com/core/transport/internet/domainsocket"
|
|
|
|
"v2ray.com/ext/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestListenAbstract(t *testing.T) {
|
|
|
|
listener, err := domainsocket.ListenDS(context.Background(), "\x00V2RayDimension/TestListenAbstract")
|
|
|
|
asrt := assert.With(t)
|
|
|
|
asrt(err, assert.IsNil)
|
|
|
|
asrt(listener, assert.IsNotNil)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestListen(t *testing.T) {
|
|
|
|
listener, err := domainsocket.ListenDS(context.Background(), "/tmp/ts")
|
|
|
|
asrt := assert.With(t)
|
|
|
|
asrt(err, assert.IsNil)
|
|
|
|
asrt(listener, assert.IsNotNil)
|
|
|
|
errolu := listener.LowerUP()
|
|
|
|
asrt(errolu, assert.IsNil)
|
|
|
|
ctx, fin := context.WithCancel(context.Background())
|
|
|
|
chi := make(chan net.Conn, 2)
|
|
|
|
go func() {
|
|
|
|
for {
|
|
|
|
select {
|
|
|
|
case conn := <-chi:
|
|
|
|
test := make([]byte, 256)
|
|
|
|
nc, errc := conn.Read(test)
|
|
|
|
asrt(errc, assert.IsNil)
|
|
|
|
conn.Write(test[:nc])
|
|
|
|
time.Sleep(time.Second)
|
|
|
|
conn.Close()
|
|
|
|
case <-ctx.Done():
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
listener.UP(chi, false)
|
|
|
|
con, erro := net.Dial("unix", "/tmp/ts")
|
|
|
|
asrt(erro, assert.IsNil)
|
|
|
|
b := []byte("ABC")
|
|
|
|
c := []byte("XXX")
|
|
|
|
_, erron := con.Write(b)
|
|
|
|
asrt(erron, assert.IsNil)
|
|
|
|
con.Read(c)
|
|
|
|
con.Close()
|
|
|
|
asrt(b[0]-c[0] == 0, assert.IsTrue)
|
|
|
|
fin()
|
|
|
|
listener.Down()
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestListenA(t *testing.T) {
|
|
|
|
listener, err := domainsocket.ListenDS(context.Background(), "\x00/tmp/ts")
|
|
|
|
asrt := assert.With(t)
|
|
|
|
asrt(err, assert.IsNil)
|
|
|
|
asrt(listener, assert.IsNotNil)
|
|
|
|
errolu := listener.LowerUP()
|
|
|
|
asrt(errolu, assert.IsNil)
|
|
|
|
ctx, fin := context.WithCancel(context.Background())
|
|
|
|
chi := make(chan net.Conn, 2)
|
|
|
|
go func() {
|
|
|
|
for {
|
|
|
|
select {
|
|
|
|
case conn := <-chi:
|
|
|
|
test := make([]byte, 256)
|
|
|
|
nc, errc := conn.Read(test)
|
|
|
|
asrt(errc, assert.IsNil)
|
|
|
|
conn.Write(test[:nc])
|
|
|
|
time.Sleep(time.Second)
|
|
|
|
conn.Close()
|
|
|
|
case <-ctx.Done():
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
listener.UP(chi, false)
|
|
|
|
con, erro := net.Dial("unix", "\x00/tmp/ts")
|
|
|
|
asrt(erro, assert.IsNil)
|
|
|
|
b := []byte("ABC")
|
|
|
|
c := []byte("XXX")
|
|
|
|
_, erron := con.Write(b)
|
|
|
|
asrt(erron, assert.IsNil)
|
|
|
|
con.Read(c)
|
|
|
|
con.Close()
|
|
|
|
asrt(b[0]-c[0] == 0, assert.IsTrue)
|
|
|
|
fin()
|
|
|
|
listener.Down()
|
|
|
|
}
|
2018-04-05 04:17:17 -04:00
|
|
|
|
|
|
|
func TestListenDial(t *testing.T) {
|
|
|
|
listener, err := domainsocket.ListenDS(context.Background(), "\x00/tmp/ts")
|
|
|
|
asrt := assert.With(t)
|
|
|
|
asrt(err, assert.IsNil)
|
|
|
|
asrt(listener, assert.IsNotNil)
|
|
|
|
errolu := listener.LowerUP()
|
|
|
|
asrt(errolu, assert.IsNil)
|
|
|
|
ctx, fin := context.WithCancel(context.Background())
|
|
|
|
chi := make(chan net.Conn, 2)
|
|
|
|
go func() {
|
|
|
|
for {
|
|
|
|
select {
|
|
|
|
case conn := <-chi:
|
|
|
|
test := make([]byte, 256)
|
|
|
|
nc, errc := conn.Read(test)
|
|
|
|
asrt(errc, assert.IsNil)
|
|
|
|
conn.Write(test[:nc])
|
|
|
|
time.Sleep(time.Second)
|
|
|
|
conn.Close()
|
|
|
|
case <-ctx.Done():
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
listener.UP(chi, false)
|
|
|
|
con, erro := domainsocket.DialDS(context.Background(), "\x00/tmp/ts")
|
|
|
|
asrt(erro, assert.IsNil)
|
|
|
|
b := []byte("ABC")
|
|
|
|
c := []byte("XXX")
|
|
|
|
_, erron := con.Write(b)
|
|
|
|
asrt(erron, assert.IsNil)
|
|
|
|
con.Read(c)
|
|
|
|
con.Close()
|
|
|
|
asrt(b[0]-c[0] == 0, assert.IsTrue)
|
|
|
|
fin()
|
|
|
|
listener.Down()
|
|
|
|
}
|