Example #1
0
func Test_QueryReader(t *testing.T) {
	conn, err := Connect(TestConnParam)
	unitest.NotError(t, err)
	defer conn.Close()

	var res DataReader

	res, err = conn.QueryReader("SELECT * FROM test ORDER BY id ASC")
	unitest.NotError(t, err)
	defer res.Close()

	i := 0
	for {
		row, err1 := res.FetchNext()
		unitest.NotError(t, err1)

		if row == nil {
			break
		}

		unitest.Pass(t, row[0].Int64() == int64(i))
		unitest.Pass(t, row[1].String() == strconv.Itoa(i))
		i++
	}

	unitest.Pass(t, i == 10)
}
Example #2
0
func MemPoolTest(t *testing.T, total, min, max int) {
	pool := NewBufferPool(total, min, max)

	for i := min; i <= max; i++ {
		min1 := (i-1)*1024 + 1
		max1 := i * 1024

		b1 := pool.alloc(min1, min1)
		b2 := pool.alloc(max1, max1)

		unitest.Pass(t, cap(b1.Data) == max1)
		unitest.Pass(t, cap(b2.Data) == max1)

		b1.Free()
		b2.Free()
	}

	rand.Seed(time.Now().UnixNano())

	for i := 0; i < 100000; i++ {
		size := (rand.Intn(max-min+1) + min) * 1024
		b := pool.alloc(size, size)
		b.Free()
	}
	/*
		for _, class := range pool.classes {
			unitest.Pass(t, class.length == class.maxlen)
		}
	*/
}
Example #3
0
func Test_Query(t *testing.T) {
	conn, err := sql.Open("mysql", TestConnParam)
	unitest.NotError(t, err)
	defer conn.Close()

	var res *sql.Rows

	res, err = conn.Query("SELECT * FROM test ORDER BY id ASC")
	unitest.NotError(t, err)
	defer res.Close()

	i := 0
	for res.Next() {
		var (
			id    int64
			value string
		)

		err := res.Scan(&id, &value)
		unitest.NotError(t, err)

		unitest.Pass(t, id == int64(i))
		unitest.Pass(t, value == strconv.Itoa(i))
		i++
	}

	unitest.Pass(t, i == 10)
}
Example #4
0
func Test_Execute(t *testing.T) {
	param := TestConnParam
	param.DbName = "mysql"

	conn, err := Connect(param)
	unitest.NotError(t, err)
	defer conn.Close()

	_, err = conn.Execute("CREATE DATABASE " + TestConnParam.DbName)
	unitest.NotError(t, err)

	_, err = conn.Execute("USE " + TestConnParam.DbName)
	unitest.NotError(t, err)

	_, err = conn.Execute(`CREATE TABLE test (
		id INT PRIMARY KEY,
		value VARCHAR(10)
	)`)
	unitest.NotError(t, err)

	for i := 0; i < 10; i++ {
		res, err := conn.Execute("INSERT INTO test VALUES(" + strconv.Itoa(i) + ",'" + strconv.Itoa(i) + "')")
		unitest.NotError(t, err)
		unitest.Pass(t, res.RowsAffected() == 1)
	}
}
Example #5
0
func Test_Execute(t *testing.T) {
	param := TestConnEnv
	param.DbName = "mysql"
	name, _ := json.Marshal(param)

	conn, err := sql.Open("mysql", string(name))
	unitest.NotError(t, err)
	defer conn.Close()

	_, err = conn.Exec("CREATE DATABASE " + TestConnEnv.DbName)
	unitest.NotError(t, err)

	_, err = conn.Exec("USE " + TestConnEnv.DbName)
	unitest.NotError(t, err)

	_, err = conn.Exec(`CREATE TABLE test (
		id INT PRIMARY KEY,
		value VARCHAR(10)
	)`)
	unitest.NotError(t, err)

	for i := 0; i < 10; i++ {
		res, err := conn.Exec("INSERT INTO test VALUES(" + strconv.Itoa(i) + ",'" + strconv.Itoa(i) + "')")
		unitest.NotError(t, err)
		num, _ := res.RowsAffected()
		unitest.Pass(t, num == 1)
	}
}
Example #6
0
func Test_Simple(t *testing.T) {
	backend, err := StartEchoBackend()
	unitest.NotError(t, err)

	gateway := StartTestGateway(t, backend.Listener().Addr().String())
	gatewayAddr := gateway.server.Listener().Addr().String()

	client, err := link.Connect("tcp://"+gatewayAddr, link.Packet(link.Uint16BE), link.Bytes())
	unitest.NotError(t, err)

	for i := 0; i < 10000; i++ {
		msg1 := RandBytes(1024)
		err1 := client.Send(msg1)
		unitest.NotError(t, err1)

		var msg2 []byte
		err2 := client.Receive(&msg2)
		unitest.NotError(t, err2)

		if bytes.Equal(msg1, msg2) == false {
			t.Log(i, msg1, msg2)
			t.Fail()
		}
		unitest.Pass(t, bytes.Equal(msg1, msg2))
	}
	client.Close()

	gateway.Stop()
	backend.Stop()

	time.Sleep(time.Second * 2)
	MakeSureSessionGoroutineExit(t)
}
Example #7
0
func Test_PHP_HTTP(t *testing.T) {
	result, err := PHP(`
		$r = $client->Call("Arith.Multiply", array('A'=>7, 'B'=>8));
		echo $r->result;
	`)
	unitest.NotError(t, err)
	unitest.Pass(t, result == "56")
}
Example #8
0
func Test_PHP_Error(t *testing.T) {
	rpcErr, err := PHP(`
		$r = $client->Call("Arith.GetError");
		echo $r->error;
	`)
	unitest.NotError(t, err)
	unitest.Pass(t, rpcErr == "Error!")
}
Example #9
0
func Test_Prepare(t *testing.T) {
	conn, err := sql.Open("mysql", TestConnParam)
	unitest.NotError(t, err)
	defer conn.Close()

	var (
		stmt   *sql.Stmt
		res    sql.Result
		reader *sql.Rows
	)

	stmt, err = conn.Prepare("SELECT * FROM test ORDER BY id ASC")
	unitest.NotError(t, err)

	reader, err = stmt.Query()
	unitest.NotError(t, err)

	i := 0
	for reader.Next() {
		var (
			id    int64
			value string
		)

		err := reader.Scan(&id, &value)
		unitest.NotError(t, err)

		unitest.Pass(t, id == int64(i))
		unitest.Pass(t, value == strconv.Itoa(i))
		i++
	}

	unitest.Pass(t, i == 10)

	stmt.Close()

	stmt, err = conn.Prepare("INSERT INTO test VALUES(?, ?)")
	unitest.NotError(t, err)

	res, err = stmt.Exec(10, "10")
	unitest.NotError(t, err)
	num, _ := res.RowsAffected()
	unitest.Pass(t, num == 1)

	stmt.Close()
}
Example #10
0
func Test_Prepare(t *testing.T) {
	conn, err := Connect(TestConnParam)
	unitest.NotError(t, err)
	defer conn.Close()

	var (
		stmt   *Stmt
		res    Result
		table  DataTable
		reader DataReader
	)

	stmt, err = conn.Prepare("SELECT * FROM test ORDER BY id ASC")
	unitest.NotError(t, err)

	table, err = stmt.QueryTable()
	unitest.NotError(t, err)

	rows := table.Rows()
	unitest.Pass(t, len(rows) == 10)

	for i := 0; i < 10; i++ {
		unitest.Pass(t, rows[i][0].Int64() == int64(i))
		unitest.Pass(t, rows[i][1].String() == strconv.Itoa(i))
	}

	reader, err = stmt.QueryReader()
	unitest.NotError(t, err)

	i := 0
	for {
		row, err1 := reader.FetchNext()
		unitest.NotError(t, err1)

		if row == nil {
			break
		}

		unitest.Pass(t, row[0].Int64() == int64(i))
		unitest.Pass(t, row[1].String() == strconv.Itoa(i))

		i++
	}

	unitest.Pass(t, i == 10)

	stmt.Close()

	stmt, err = conn.Prepare("INSERT INTO test VALUES(?, ?)")
	unitest.NotError(t, err)

	stmt.BindInt(10)
	stmt.BindText("10")

	res, err = stmt.Execute()
	unitest.NotError(t, err)
	unitest.Pass(t, res.RowsAffected() == 1)

	stmt.Close()
}
Example #11
0
func Test_QueryTable(t *testing.T) {
	conn, err := Connect(TestConnParam)
	unitest.NotError(t, err)
	defer conn.Close()

	var res DataTable

	res, err = conn.QueryTable("SELECT * FROM test ORDER BY id ASC")
	unitest.NotError(t, err)

	rows := res.Rows()
	unitest.Pass(t, len(rows) == 10)

	for i := 0; i < 10; i++ {
		unitest.Pass(t, rows[i][0].Int64() == int64(i))
		unitest.Pass(t, rows[i][1].String() == strconv.Itoa(i))
	}
}
Example #12
0
func Test_Connect(t *testing.T) {
	param := TestConnParam
	param.DbName = "mysql"

	conn, err := Connect(param)
	unitest.NotError(t, err)

	conn.Close()
	unitest.Pass(t, conn.IsClosed())
}
Example #13
0
func Test_Go_TCP(t *testing.T) {
	var client, err = Dial("tcp", "127.0.0.1:23456")
	if err != nil {
		log.Fatal("Dialing:", err)
	}

	var reply int
	err = client.Call("Arith.Multiply", &Args{7, 8}, &reply)

	unitest.NotError(t, err)
	unitest.Pass(t, reply == 56)
}
Example #14
0
func Test_Uint32BE(t *testing.T) {
	ReadWriteTest(t, 10000, func(r *Reader, w *Writer) {
		v1 := uint32(rand.Intn(0xFFFFFFFF))
		w.WriteUint32BE(v1)
		w.Flush()
		unitest.NotError(t, w.Error())

		v2 := r.ReadUint32BE()
		unitest.NotError(t, r.Error())
		unitest.Pass(t, v1 == v2)
	})
}
Example #15
0
func Test_Float64LE(t *testing.T) {
	ReadWriteTest(t, 10000, func(r *Reader, w *Writer) {
		v1 := rand.NormFloat64()
		w.WriteFloat64LE(v1)
		w.Flush()
		unitest.NotError(t, w.Error())

		v2 := r.ReadFloat64LE()
		unitest.NotError(t, r.Error())
		unitest.Pass(t, v1 == v2)
	})
}
Example #16
0
func Test_Varint(t *testing.T) {
	ReadWriteTest(t, 10000, func(r *Reader, w *Writer) {
		v1 := int64(rand.Int63n(0x7FFFFFFFFFFFFFFF))
		w.WriteVarint(v1)
		w.Flush()
		unitest.NotError(t, w.Error())

		v2 := r.ReadVarint()
		unitest.NotError(t, r.Error())
		unitest.Pass(t, v1 == v2)
	})
}
Example #17
0
func ObjectTest(t *testing.T, session *Session) {
	for i := 0; i < 2000; i++ {
		msg1 := RandObject()
		err := session.Send(&msg1)
		unitest.NotError(t, err)

		var msg2 TestObject
		err = session.Receive(&msg2)
		unitest.NotError(t, err)
		unitest.Pass(t, msg1 == msg2)
	}
}
Example #18
0
func BytesTest(t *testing.T, session *Session) {
	for i := 0; i < 2000; i++ {
		msg1 := RandBytes(512)
		err := session.Send(msg1)
		unitest.NotError(t, err)

		var msg2 = make([]byte, len(msg1))
		err = session.Receive(msg2)
		unitest.NotError(t, err)
		unitest.Pass(t, bytes.Equal(msg1, msg2))
	}
}
Example #19
0
func StringTest(t *testing.T, session *Session) {
	for i := 0; i < 2000; i++ {
		msg1 := string(RandBytes(512))
		err := session.Send(msg1)
		unitest.NotError(t, err)

		var msg2 string
		err = session.Receive(&msg2)
		unitest.NotError(t, err)
		unitest.Pass(t, msg1 == msg2)
	}
}
Example #20
0
func Test_PacketReaderWriter(t *testing.T) {
	buffer := NewBuffer(nil)
	r := NewPacketReader(SplitByUint16BE, buffer)
	w := NewPacketWriter(SplitByUint16BE, buffer)
	for i := 0; i < 10000; i++ {
		p1 := RandBytes(1024)
		p2 := make([]byte, len(p1))

		n, err := w.Write(p1)
		unitest.NotError(t, err)
		unitest.Pass(t, n == len(p1))

		err = w.Flush()
		unitest.NotError(t, err)

		n, err = io.ReadFull(r, p2)
		unitest.NotError(t, err)
		unitest.Pass(t, n == len(p1))
		unitest.Pass(t, bytes.Equal(p1, p2))
	}
}
Example #21
0
func Test_Uint24BE_Spliter(t *testing.T) {
	ReadWriteTest(t, 10000, func(r *Reader, w *Writer) {
		b1 := RandBytes(1024)
		w.WritePacket(b1, SplitByUint24BE)
		w.Flush()
		unitest.NotError(t, w.Error())

		b2 := r.ReadPacket(SplitByUint24BE)
		unitest.NotError(t, r.Error())
		unitest.Pass(t, bytes.Equal(b1, b2))
	})
}
Example #22
0
func Test_Null(t *testing.T) {
	conn, err := Connect(TestConnParam)
	unitest.NotError(t, err)
	defer conn.Close()

	var res DataTable

	res, err = conn.QueryTable("SELECT SUM(value) FROM test")
	unitest.NotError(t, err)

	rows1 := res.Rows()
	unitest.Pass(t, len(rows1) == 1)
	unitest.Pass(t, rows1[0][0].IsNull() == false)

	res, err = conn.QueryTable("SELECT SUM(value) FROM test WHERE id > 8888")
	unitest.NotError(t, err)

	rows2 := res.Rows()
	unitest.Pass(t, len(rows2) == 1)
	unitest.Pass(t, rows2[0][0].IsNull())
}
Example #23
0
func Test_Gateway_Complex(t *testing.T) {
	backend := StartTestBackend(t, func(session *link.Session) {
		var msg packet.RAW
		for {
			if err := session.Receive(&msg); err != nil {
				break
			}
			if err := session.Send(msg); err != nil {
				break
			}
		}
	})

	gateway := StartTestGateway(t, backend.Listener().Addr().String())
	gatewayAddr := gateway.server.Listener().Addr().String()

	var wg sync.WaitGroup
	for i := 0; i < 20; i++ {
		wg.Add(1)
		go func() {
			defer wg.Done()

			client, err := link.Connect("tcp", gatewayAddr, protocol)
			unitest.NotError(t, err)

			for j := 0; j < 500; j++ {
				msg1 := RandBytes(1024)
				err1 := client.Send(packet.RAW(msg1))
				unitest.NotError(t, err1)

				var msg2 packet.RAW
				err2 := client.Receive(&msg2)
				unitest.NotError(t, err2)

				if bytes.Equal(msg1, msg2) == false {
					t.Log(j, msg1, msg2)
					t.Fail()
				}
				unitest.Pass(t, bytes.Equal(msg1, msg2))
			}

			client.Close()
		}()
	}
	wg.Wait()

	gateway.Stop()
	backend.Stop()

	time.Sleep(time.Second * 2)
	MakeSureSessionGoroutineExit(t)
}
Example #24
0
func Test_Stream(t *testing.T) {
	StreamTest(t, func(session *link.Session) {
		for i := 0; i < 100000; i++ {
			msg1 := RandBytes(1024)
			err := session.Send(TestMessage(msg1))
			unitest.NotError(t, err)

			var msg2 TestMessage
			err = session.Receive(&msg2)
			unitest.NotError(t, err)
			unitest.Pass(t, bytes.Equal(msg1, msg2))
		}
	})
}
Example #25
0
func Test_BytesStream(t *testing.T) {
	SessionTest(t, Stream(), Bytes(), func(t *testing.T, session *Session) {
		for i := 0; i < 2000; i++ {
			msg1 := RandBytes(1024)
			err := session.Send(msg1)
			unitest.NotError(t, err)

			var msg2 = make([]byte, len(msg1))
			err = session.Receive(msg2)
			unitest.NotError(t, err)
			unitest.Pass(t, bytes.Equal(msg1, msg2))
		}
	})
}
Example #26
0
func Test_BytesPacket(t *testing.T) {
	SessionTest(t, Packet(Uint16BE), Bytes(), func(t *testing.T, session *Session) {
		for i := 0; i < 2000; i++ {
			msg1 := RandBytes(1024)
			err := session.Send(msg1)
			unitest.NotError(t, err)

			var msg2 []byte
			err = session.Receive(&msg2)
			unitest.NotError(t, err)
			unitest.Pass(t, bytes.Equal(msg1, msg2))
		}
	})
}
Example #27
0
func Test_Packet(t *testing.T) {
	PacketTest(t, func(session *link.Session) {
		for i := 0; i < 100000; i++ {
			msg1 := RandBytes(1024)
			err := session.Send(RAW(msg1))
			unitest.NotError(t, err)

			var msg2 RAW
			err = session.Receive(&msg2)
			unitest.NotError(t, err)
			unitest.Pass(t, bytes.Equal(msg1, msg2))
		}
	})
}
Example #28
0
func Test_GOB(t *testing.T) {
	StreamTest(t, func(session *link.Session) {
		for i := 0; i < 50000; i++ {
			msg1 := TestObject{
				X: rand.Int(), Y: rand.Int(), Z: rand.Int(),
			}
			err := session.Send(GOB{msg1})
			unitest.NotError(t, err)

			var msg2 TestObject
			err = session.Receive(GOB{&msg2})
			unitest.NotError(t, err)
			unitest.Pass(t, msg1 == msg2)
		}
	})
}
Example #29
0
func Test_Delim_Spliter(t *testing.T) {
	ReadWriteTest(t, 1000, func(r *Reader, w *Writer) {
		b1 := RandBytes(1024)
		b2 := make([]byte, base64.StdEncoding.EncodedLen(len(b1)))
		base64.StdEncoding.Encode(b2, b1)

		w.WritePacket(b2, SplitByLine)
		w.Flush()
		unitest.NotError(t, w.Error())

		b3 := r.ReadPacket(SplitByLine)
		unitest.NotError(t, r.Error())

		b4 := make([]byte, base64.StdEncoding.DecodedLen(len(b3)))
		n, err := base64.StdEncoding.Decode(b4, b3)
		unitest.NotError(t, err)
		unitest.Pass(t, bytes.Equal(b1, b4[:n]))
	})
}
Example #30
0
func Test_Binary(t *testing.T) {
	x := make([]byte, 8)

	PutUintLE(x, 2, uint64(0xAB))
	unitest.Pass(t, GetUintLE(x, 2) == 0xAB)
	unitest.Pass(t, binary.LittleEndian.Uint16(x) == 0xAB)

	PutUintBE(x, 2, uint64(0xAB))
	unitest.Pass(t, GetUintBE(x, 2) == 0xAB)
	unitest.Pass(t, binary.BigEndian.Uint16(x) == 0xAB)

	PutUintLE(x, 4, uint64(0xABCD))
	unitest.Pass(t, GetUintLE(x, 4) == 0xABCD)
	unitest.Pass(t, binary.LittleEndian.Uint32(x) == 0xABCD)

	PutUintBE(x, 4, uint64(0xABCD))
	unitest.Pass(t, GetUintBE(x, 4) == 0xABCD)
	unitest.Pass(t, binary.BigEndian.Uint32(x) == 0xABCD)

	PutUintLE(x, 8, uint64(0xABCDEFAB))
	unitest.Pass(t, GetUintLE(x, 8) == 0xABCDEFAB)
	unitest.Pass(t, binary.LittleEndian.Uint64(x) == 0xABCDEFAB)

	PutUintBE(x, 8, uint64(0xABCDEFAB))
	unitest.Pass(t, GetUintBE(x, 8) == 0xABCDEFAB)
	unitest.Pass(t, binary.BigEndian.Uint64(x) == 0xABCDEFAB)
}