func TestTableDel(t *testing.T) { var in proto.PkgOneOp in.Cmd = proto.CmdSet in.DbId = 1 in.Seq = 10 in.KeyValue = getTestKV(2, []byte("row1"), []byte("col1"), nil, 0, 0) myDel(in, testAuth, getTestWA(), true, t) }
func (ms *master) syncStatus(key string, lastSeq uint64) { var p proto.PkgOneOp p.Cmd = proto.CmdSyncSt p.DbId = proto.AdminDbId p.Seq = lastSeq p.RowKey = []byte(key) var pkg = make([]byte, p.Length()) p.Encode(pkg) ms.cli.AddResp(pkg) }
func TestTableSetCas(t *testing.T) { var in proto.PkgOneOp in.Cmd = proto.CmdSet in.DbId = 1 in.Seq = 10 in.KeyValue = getTestKV(2, []byte("row1"), []byte("col1"), []byte("v1"), 30, 600) out := mySet(in, testAuth, getTestWA(), false, t) if out.ErrCode != table.EcCasNotMatch { t.Fatalf("Should fail with EcCasNotMatch") } }
func TestTableIncr(t *testing.T) { var in proto.PkgOneOp in.Cmd = proto.CmdGet in.DbId = 1 in.Seq = 10 in.KeyValue = getTestKV(2, []byte("row1"), []byte("col1"), nil, -21, 0) out := myIncr(in, testAuth, getTestWA(), true, t) if len(out.Value) != 0 { t.Fatalf("Value mismatch: %q", out.Value) } if out.Score != -21 { t.Fatalf("Score mismatch") } }
func TestTableGet(t *testing.T) { var in proto.PkgOneOp in.Cmd = proto.CmdGet in.DbId = 1 in.Seq = 10 in.KeyValue = getTestKV(2, []byte("row1"), []byte("col1"), nil, 0, 0) out := myGet(in, testAuth, getTestWA(), t) if bytes.Compare(out.Value, []byte("v1")) != 0 { t.Fatalf("Value mismatch: %q", out.Value) } if out.Score != 30 { t.Fatalf("Score mismatch") } }
func (srv *Server) replyOneOp(req *Request, errCode int8) { var out proto.PkgOneOp out.Cmd = req.Cmd out.DbId = req.DbId out.Seq = req.Seq out.ErrCode = errCode if out.ErrCode != 0 { out.CtrlFlag |= proto.CtrlErrCode } var pkg = make([]byte, out.Length()) _, err := out.Encode(pkg) if err != nil { log.Fatalf("Encode failed: %s\n", err) } srv.sendResp(false, req, pkg) }
// Get, Set, Del, Incr, ZGet, ZSet, ZDel, ZIncr func (c *Context) goOneOp(zop bool, cmd, tableId uint8, rowKey, colKey, value []byte, score int64, cas uint32, done chan *Call) (*Call, error) { call := c.cli.newCall(cmd, done) if call.err != nil { return call, call.err } var p proto.PkgOneOp p.Seq = call.seq p.DbId = c.dbId p.Cmd = call.cmd p.TableId = tableId p.RowKey = rowKey p.ColKey = colKey p.SetCas(cas) p.SetScore(score) p.SetValue(value) // ZGet, ZSet, ZDel, ZIncr if zop { p.PkgFlag |= proto.FlagZop } var pkgLen = p.Length() if pkgLen > proto.MaxPkgLen { c.cli.errCall(call, ErrInvPkgLen) return call, call.err } call.pkg = make([]byte, pkgLen) _, err := p.Encode(call.pkg) if err != nil { c.cli.errCall(call, err) return call, err } // put request pkg to sending channel c.cli.sending <- call return call, nil }
func TestTableGetCas(t *testing.T) { var in proto.PkgOneOp in.Cmd = proto.CmdGet in.DbId = 1 in.Seq = 10 in.KeyValue = getTestKV(2, []byte("row1"), []byte("col1"), []byte("v1"), 0, 2) out := myGet(in, testAuth, getTestWA(), t) if bytes.Compare(out.Value, []byte("v1")) != 0 { t.Fatalf("Value mismatch: %q", out.Value) } if out.Score != 30 { t.Fatalf("Score mismatch") } if out.Cas == 0 { t.Fatalf("Should return new cas") } // Set in.Cmd = proto.CmdSet in.SetValue(append(out.Value, []byte("-cas")...)) in.SetScore(32) in.SetCas(out.Cas) mySet(in, testAuth, getTestWA(), true, t) // Set again should fail mySet(in, testAuth, getTestWA(), false, t) // Get in.Cmd = proto.CmdGet in.Cas = 0 in.CtrlFlag &^= 0xFF out = myGet(in, testAuth, getTestWA(), t) if bytes.Compare(out.Value, []byte("v1-cas")) != 0 { t.Fatalf("Value mismatch: %q", out.Value) } if out.Score != 32 { t.Fatalf("Score mismatch") } }
func TestTableZopSetGet(t *testing.T) { var in proto.PkgOneOp in.PkgFlag |= proto.FlagZop in.Cmd = proto.CmdSet in.DbId = 1 in.Seq = 10 in.KeyValue = getTestKV(2, []byte("row1"), []byte("col1"), []byte("v1"), 30, 0) // ZSET mySet(in, testAuth, getTestWA(), true, t) // ZGET in.Cmd = proto.CmdGet out := myGet(in, testAuth, getTestWA(), t) if bytes.Compare(out.Value, []byte("v1")) != 0 { t.Fatalf("Value mismatch: %q", out.Value) } if out.Score != 30 { t.Fatalf("Score mismatch") } }