func (expected Expected) assert(suite suite.Suite, obtainedCursor *r.Cursor, obtainedErr error) { if suite.NoError(obtainedErr, "Query returned unexpected error") { return } expectedVal := reflect.ValueOf(expected.Val) // If expected value is nil then ensure cursor is nil (assume that an // invalid reflect value is because expected value is nil) if !expectedVal.IsValid() || (expectedVal.Kind() == reflect.Ptr && expectedVal.IsNil()) { suite.True(obtainedCursor.IsNil(), "Expected nil cursor") return } expectedType := expectedVal.Type() expectedKind := expectedType.Kind() if expectedKind == reflect.Array || expectedKind == reflect.Slice || expected.Fetch { if expectedType.Elem().Kind() == reflect.Uint8 { // Decode byte slices slightly differently var obtained = []byte{} err := obtainedCursor.One(&obtained) suite.NoError(err, "Error returned when reading query response") compare.Assert(suite.T(), expected, obtained) } else { var obtained = []interface{}{} if expected.Fetch { var v interface{} for obtainedCursor.Next(&v) { obtained = append(obtained, v) if expected.FetchCount != 0 && len(obtained) >= expected.FetchCount { break } } suite.NoError(obtainedCursor.Err(), "Error returned when reading query response") } else { err := obtainedCursor.All(&obtained) suite.NoError(err, "Error returned when reading query response") } compare.Assert(suite.T(), expected, obtained) } } else if expectedKind == reflect.Map { var obtained map[string]interface{} err := obtainedCursor.One(&obtained) suite.NoError(err, "Error returned when reading query response") compare.Assert(suite.T(), expected, obtained) } else { var obtained interface{} err := obtainedCursor.One(&obtained) suite.NoError(err, "Error returned when reading query response") compare.Assert(suite.T(), expected, obtained) } }
func (suite *ChangefeedsIdxcopySuite) TestCases() { suite.T().Log("Running ChangefeedsIdxcopySuite: Test duplicate indexes with squashing") tbl := r.DB("test").Table("tbl") _ = tbl // Prevent any noused variable errors { // changefeeds/idxcopy.yaml line #4 /* partial({'created':1}) */ var expected_ compare.Expected = compare.PartialMatch(map[interface{}]interface{}{"created": 1}) /* tbl.index_create('a') */ suite.T().Log("About to run line #4: tbl.IndexCreate('a')") runAndAssert(suite.Suite, expected_, tbl.IndexCreate("a"), suite.session, r.RunOpts{ GeometryFormat: "raw", GroupFormat: "map", }) suite.T().Log("Finished running line #4") } { // changefeeds/idxcopy.yaml line #6 /* AnythingIsFine */ var expected_ string = compare.AnythingIsFine /* tbl.index_wait('a') */ suite.T().Log("About to run line #6: tbl.IndexWait('a')") runAndAssert(suite.Suite, expected_, tbl.IndexWait("a"), suite.session, r.RunOpts{ GeometryFormat: "raw", GroupFormat: "map", }) suite.T().Log("Finished running line #6") } // changefeeds/idxcopy.yaml line #8 // feed = tbl.order_by(index='a').limit(10).changes(squash=2).limit(9) suite.T().Log("Possibly executing: var feed r.Term = tbl.OrderBy().OptArgs(r.OrderByOpts{Index: 'a', }).Limit(10).Changes().OptArgs(r.ChangesOpts{Squash: 2, }).Limit(9)") feed := maybeRun(tbl.OrderBy().OptArgs(r.OrderByOpts{Index: "a"}).Limit(10).Changes().OptArgs(r.ChangesOpts{Squash: 2}).Limit(9), suite.session, r.RunOpts{ MaxBatchRows: 1, }) _ = feed // Prevent any noused variable errors { // changefeeds/idxcopy.yaml line #15 /* partial({'inserted':12, 'errors':0}) */ var expected_ compare.Expected = compare.PartialMatch(map[interface{}]interface{}{"inserted": 12, "errors": 0}) /* tbl.insert(r.range(0, 12).map({'id':r.row, 'a':5})) */ suite.T().Log("About to run line #15: tbl.Insert(r.Range(0, 12).Map(map[interface{}]interface{}{'id': r.Row, 'a': 5, }))") runAndAssert(suite.Suite, expected_, tbl.Insert(r.Range(0, 12).Map(map[interface{}]interface{}{"id": r.Row, "a": 5})), suite.session, r.RunOpts{ GeometryFormat: "raw", GroupFormat: "map", }) suite.T().Log("Finished running line #15") } { // changefeeds/idxcopy.yaml line #20 /* partial({'deleted':3, 'errors':0}) */ var expected_ compare.Expected = compare.PartialMatch(map[interface{}]interface{}{"deleted": 3, "errors": 0}) /* tbl.get_all(1, 8, 9, index='id').delete() */ suite.T().Log("About to run line #20: tbl.GetAll(1, 8, 9).OptArgs(r.GetAllOpts{Index: 'id', }).Delete()") runAndAssert(suite.Suite, expected_, tbl.GetAll(1, 8, 9).OptArgs(r.GetAllOpts{Index: "id"}).Delete(), suite.session, r.RunOpts{ GeometryFormat: "raw", GroupFormat: "map", }) suite.T().Log("Finished running line #20") } { // changefeeds/idxcopy.yaml line #26 /* AnythingIsFine */ var expected_ string = compare.AnythingIsFine /* wait(2) */ suite.T().Log("About to run line #26: wait(2)") actual := wait(2) compare.Assert(suite.T(), expected_, actual) suite.T().Log("Finished running line #26") } { // changefeeds/idxcopy.yaml line #28 /* bag([ {"new_val":{"a":5, "id":0}, "old_val":nil}, {"new_val":{"a":5, "id":2}, "old_val":nil}, {"new_val":{"a":5, "id":3}, "old_val":nil}, {"new_val":{"a":5, "id":4}, "old_val":nil}, {"new_val":{"a":5, "id":5}, "old_val":nil}, {"new_val":{"a":5, "id":6}, "old_val":nil}, {"new_val":{"a":5, "id":7}, "old_val":nil}, {"new_val":{"a":5, "id":10}, "old_val":nil}, {"new_val":{"a":5, "id":11}, "old_val":nil}]) */ var expected_ compare.Expected = compare.UnorderedMatch([]interface{}{map[interface{}]interface{}{"new_val": map[interface{}]interface{}{"a": 5, "id": 0}, "old_val": nil}, map[interface{}]interface{}{"new_val": map[interface{}]interface{}{"a": 5, "id": 2}, "old_val": nil}, map[interface{}]interface{}{"new_val": map[interface{}]interface{}{"a": 5, "id": 3}, "old_val": nil}, map[interface{}]interface{}{"new_val": map[interface{}]interface{}{"a": 5, "id": 4}, "old_val": nil}, map[interface{}]interface{}{"new_val": map[interface{}]interface{}{"a": 5, "id": 5}, "old_val": nil}, map[interface{}]interface{}{"new_val": map[interface{}]interface{}{"a": 5, "id": 6}, "old_val": nil}, map[interface{}]interface{}{"new_val": map[interface{}]interface{}{"a": 5, "id": 7}, "old_val": nil}, map[interface{}]interface{}{"new_val": map[interface{}]interface{}{"a": 5, "id": 10}, "old_val": nil}, map[interface{}]interface{}{"new_val": map[interface{}]interface{}{"a": 5, "id": 11}, "old_val": nil}}) /* fetch(feed) */ suite.T().Log("About to run line #28: fetch(feed, 0)") fetchAndAssert(suite.Suite, expected_, feed, 0) suite.T().Log("Finished running line #28") } }