1package gocb 2 3import ( 4 "encoding/json" 5 "strings" 6 7 gocbcore "github.com/couchbase/gocbcore/v9" 8) 9 10func (suite *UnitTestSuite) TestMutationState_Add() { 11 fakeBucket := &Bucket{} 12 fakeBucket.bucketName = "frank" 13 14 fakeToken1 := MutationToken{ 15 token: gocbcore.MutationToken{ 16 VbID: 1, 17 VbUUID: gocbcore.VbUUID(9), 18 SeqNo: gocbcore.SeqNo(12), 19 }, 20 bucketName: fakeBucket.Name(), 21 } 22 fakeToken2 := MutationToken{ 23 token: gocbcore.MutationToken{ 24 VbID: 2, 25 VbUUID: gocbcore.VbUUID(1), 26 SeqNo: gocbcore.SeqNo(22), 27 }, 28 bucketName: fakeBucket.Name(), 29 } 30 fakeToken3 := MutationToken{ 31 token: gocbcore.MutationToken{ 32 VbID: 2, 33 VbUUID: gocbcore.VbUUID(4), 34 SeqNo: gocbcore.SeqNo(99), 35 }, 36 bucketName: fakeBucket.Name(), 37 } 38 39 state := NewMutationState(fakeToken1, fakeToken2) 40 state.Add(fakeToken3) 41 42 bytes, err := json.Marshal(&state) 43 if err != nil { 44 suite.T().Fatalf("Failed to marshal %v", err) 45 } 46 47 if strings.Compare(string(bytes), "{\"frank\":{\"1\":[12,\"9\"],\"2\":[99,\"4\"]}}") != 0 { 48 suite.T().Fatalf("Failed to generate correct JSON output %s", bytes) 49 } 50 51 // So as to avoid testing on private properties we'll check if unmarshal works by marshaling the result. 52 var afterState MutationState 53 err = json.Unmarshal(bytes, &afterState) 54 if err != nil { 55 suite.T().Fatalf("Failed to unmarshal %v", err) 56 } 57 58 bytes, err = json.Marshal(&state) 59 if err != nil { 60 suite.T().Fatalf("Failed to marshal %v", err) 61 } 62 63 if strings.Compare(string(bytes), "{\"frank\":{\"1\":[12,\"9\"],\"2\":[99,\"4\"]}}") != 0 { 64 suite.T().Fatalf("Failed to generate correct JSON output %s", bytes) 65 } 66} 67 68func (suite *UnitTestSuite) TestMutationState_toSeachMutationState() { 69 fakeBucket := &Bucket{} 70 fakeBucket.bucketName = "frank" 71 72 fakeToken1 := MutationToken{ 73 token: gocbcore.MutationToken{ 74 VbID: 1, 75 VbUUID: gocbcore.VbUUID(9), 76 SeqNo: gocbcore.SeqNo(12), 77 }, 78 bucketName: fakeBucket.Name(), 79 } 80 fakeToken2 := MutationToken{ 81 token: gocbcore.MutationToken{ 82 VbID: 2, 83 VbUUID: gocbcore.VbUUID(1), 84 SeqNo: gocbcore.SeqNo(22), 85 }, 86 bucketName: fakeBucket.Name(), 87 } 88 89 state := NewMutationState(fakeToken1, fakeToken2) 90 91 searchToken := state.toSearchMutationState() 92 93 // What we actually care about is the format once marshaled. 94 bytes, err := json.Marshal(&searchToken) 95 if err != nil { 96 suite.T().Fatalf("Failed to marshal %v", err) 97 } 98 99 if strings.Compare(string(bytes), "{\"frank\":{\"1/9\":12,\"2/1\":22}}") != 0 { 100 suite.T().Fatalf("Failed to generate correct JSON output %s", bytes) 101 } 102} 103