func (mc *Client) sendAck(pkt *transport.MCRequest) (int, error) { res := transport.MCResponse{ Opcode: pkt.Opcode, Opaque: pkt.Opaque, Status: transport.SUCCESS, } return res.Transmit(mc.conn) }
func BenchmarkTransmitResNull(b *testing.B) { res := transport.MCResponse{ Opcode: transport.SET, Cas: 938424885, Opaque: 7242, Status: 824, Key: []byte("somekey"), Body: []byte("somevalue"), } b.SetBytes(int64(res.Size())) for i := 0; i < b.N; i++ { _, err := transmitResponse(ioutil.Discard, &res) if err != nil { b.Fatalf("Error transmitting request: %v", err) } } }
func TestTransmitRes(t *testing.T) { b := &bytes.Buffer{} buf := bufio.NewWriter(b) res := transport.MCResponse{ Opcode: transport.SET, Cas: 938424885, Opaque: 7242, Status: 0x338, Key: []byte("somekey"), Body: []byte("somevalue"), } _, err := transmitResponse(buf, &res) if err != nil { t.Fatalf("Error transmitting request: %v", err) } buf.Flush() expected := []byte{ transport.RES_MAGIC, byte(transport.SET), 0x0, 0x7, // length of key 0x0, // extra length 0x0, // reserved 0x3, 0x38, // Status 0x0, 0x0, 0x0, 0x10, // Length of value 0x0, 0x0, 0x1c, 0x4a, // opaque 0x0, 0x0, 0x0, 0x0, 0x37, 0xef, 0x3a, 0x35, // CAS 's', 'o', 'm', 'e', 'k', 'e', 'y', 's', 'o', 'm', 'e', 'v', 'a', 'l', 'u', 'e'} if len(b.Bytes()) != res.Size() { t.Fatalf("Expected %v bytes, got %v", res.Size(), len(b.Bytes())) } if !reflect.DeepEqual(b.Bytes(), expected) { t.Fatalf("Expected:\n%#v\n -- got -- \n%#v", expected, b.Bytes()) } }
func BenchmarkReceive(b *testing.B) { res := transport.MCResponse{ Opcode: transport.SET, Cas: 938424885, Opaque: 7242, Status: 824, Key: []byte("somekey"), Body: []byte("somevalue"), } datum := res.Bytes() datum[0] = transport.REQ_MAGIC b.SetBytes(int64(len(datum))) b.ResetTimer() for i := 0; i < b.N; i++ { _, err := ReadPacket(bytes.NewReader(datum)) if err != nil { b.Fatalf("Failed to read: %v", err) } } }
func BenchmarkTransmitRes(b *testing.B) { bout := &bytes.Buffer{} res := transport.MCResponse{ Opcode: transport.SET, Cas: 938424885, Opaque: 7242, Status: 824, Key: []byte("somekey"), Body: []byte("somevalue"), } b.SetBytes(int64(res.Size())) for i := 0; i < b.N; i++ { bout.Reset() buf := bufio.NewWriterSize(bout, res.Size()*2) _, err := transmitResponse(buf, &res) if err != nil { b.Fatalf("Error transmitting request: %v", err) } } }
func transmitResponse(o io.Writer, res *transport.MCResponse) (int, error) { return res.Transmit(o) }
func notFound(req *transport.MCRequest, s *storage) *transport.MCResponse { var response transport.MCResponse response.Status = transport.UNKNOWN_COMMAND return &response }