(t *testing.T)
| 821 | } |
| 822 | |
| 823 | func TestImportStampClusterUUID(t *testing.T) { |
| 824 | if !base.TestUseXattrs() { |
| 825 | t.Skip("This test only works with XATTRS enabled") |
| 826 | } |
| 827 | if base.UnitTestUrlIsWalrus() { |
| 828 | t.Skip("This test requires Couchbase Server") // no cluster UUIDs in Walrus |
| 829 | } |
| 830 | |
| 831 | db, ctx := setupTestDB(t) |
| 832 | defer db.Close(ctx) |
| 833 | |
| 834 | collection, ctx := GetSingleDatabaseCollectionWithUser(ctx, t, db) |
| 835 | |
| 836 | key := "doc1" |
| 837 | bodyBytes := rawDocNoMeta() |
| 838 | |
| 839 | _, err := collection.dataStore.Add(key, 0, bodyBytes) |
| 840 | require.NoError(t, err) |
| 841 | |
| 842 | _, cas, err := collection.dataStore.GetRaw(key) |
| 843 | require.NoError(t, err) |
| 844 | |
| 845 | xattrs, _, err := collection.dataStore.GetXattrs(ctx, key, []string{base.VirtualXattrRevSeqNo}) |
| 846 | require.NoError(t, err) |
| 847 | docXattr, ok := xattrs[base.VirtualXattrRevSeqNo] |
| 848 | require.True(t, ok) |
| 849 | revSeqNo := RetrieveDocRevSeqNo(t, docXattr) |
| 850 | |
| 851 | base.SetUpTestLogging(t, base.LevelDebug, base.KeyCRUD, base.KeyMigrate, base.KeyImport) |
| 852 | |
| 853 | body := Body{} |
| 854 | err = body.Unmarshal(rawDocNoMeta()) |
| 855 | require.NoError(t, err) |
| 856 | existingDoc := &sgbucket.BucketDocument{Body: bodyBytes, Cas: cas} |
| 857 | |
| 858 | importedDoc, err := collection.importDoc(ctx, key, body, nil, false, revSeqNo, existingDoc, ImportOnDemand) |
| 859 | require.NoError(t, err) |
| 860 | if assert.NotNil(t, importedDoc) { |
| 861 | require.Len(t, importedDoc.ClusterUUID, 32) |
| 862 | } |
| 863 | |
| 864 | xattrs, _, err = collection.dataStore.GetXattrs(ctx, key, []string{base.SyncXattrName}) |
| 865 | require.NoError(t, err) |
| 866 | require.Contains(t, xattrs, base.SyncXattrName) |
| 867 | var xattr map[string]any |
| 868 | require.NoError(t, base.JSONUnmarshal(xattrs[base.SyncXattrName], &xattr)) |
| 869 | require.Len(t, xattr["cluster_uuid"].(string), 32) |
| 870 | } |
| 871 | |
| 872 | // TestImporNonZeroStart makes sure docs written before sync gateway start get imported |
| 873 | func TestImportNonZeroStart(t *testing.T) { |
nothing calls this directly
no test coverage detected