Skip to content

Commit bd6dda5

Browse files
committed
Convert test/qa-tests/jstests/export/sort_and_skip.js to Go
1 parent 23e06c2 commit bd6dda5

2 files changed

Lines changed: 70 additions & 69 deletions

File tree

mongoimport/mongoimport_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2481,3 +2481,73 @@ func exportAndImportWithQuery(
24812481
require.NoError(t, err)
24822482
return n
24832483
}
2484+
2485+
// TestRoundTripSortAndSkip verifies that mongoexport --sort and --skip
2486+
// correctly affect which documents are exported (from sort_and_skip.js).
2487+
func TestRoundTripSortAndSkip(t *testing.T) {
2488+
testtype.SkipUnlessTestType(t, testtype.IntegrationTestType)
2489+
2490+
const dbName = "mongoimport_roundtrip_sortskip_test"
2491+
const collName = "data"
2492+
2493+
sessionProvider, _, err := testutil.GetBareSessionProvider()
2494+
require.NoError(t, err)
2495+
client, err := sessionProvider.GetSession()
2496+
require.NoError(t, err)
2497+
t.Cleanup(func() {
2498+
if err := client.Database(dbName).Drop(context.Background()); err != nil {
2499+
t.Errorf("dropping test database: %v", err)
2500+
}
2501+
})
2502+
2503+
coll := client.Database(dbName).Collection(collName)
2504+
docs := make([]any, 50)
2505+
for i := range 50 {
2506+
docs[i] = bson.D{{"a", int32(i)}}
2507+
}
2508+
_, err = coll.InsertMany(t.Context(), docs)
2509+
require.NoError(t, err)
2510+
2511+
exportToolOptions, err := testutil.GetToolOptions()
2512+
require.NoError(t, err)
2513+
exportToolOptions.Namespace = &options.Namespace{DB: dbName, Collection: collName}
2514+
me, err := mongoexport.New(mongoexport.Options{
2515+
ToolOptions: exportToolOptions,
2516+
OutputFormatOptions: &mongoexport.OutputFormatOptions{
2517+
Type: "json", JSONFormat: "relaxed",
2518+
},
2519+
InputOptions: &mongoexport.InputOptions{Sort: "{a:1}", Skip: 20},
2520+
})
2521+
require.NoError(t, err)
2522+
defer me.Close()
2523+
tmpFile, err := os.CreateTemp(t.TempDir(), "export-*.json")
2524+
require.NoError(t, err)
2525+
n, err := me.Export(tmpFile)
2526+
require.NoError(t, err)
2527+
require.NoError(t, tmpFile.Close())
2528+
assert.EqualValues(t, 30, n, "should export 30 documents after skipping 20")
2529+
2530+
require.NoError(t, coll.Drop(t.Context()))
2531+
2532+
importToolOptions, err := testutil.GetToolOptions()
2533+
require.NoError(t, err)
2534+
importToolOptions.Namespace = &options.Namespace{DB: dbName, Collection: collName}
2535+
mi, err := New(Options{
2536+
ToolOptions: importToolOptions,
2537+
InputOptions: &InputOptions{File: tmpFile.Name(), ParseGrace: "stop"},
2538+
IngestOptions: &IngestOptions{},
2539+
})
2540+
require.NoError(t, err)
2541+
imported, _, err := mi.ImportDocuments()
2542+
require.NoError(t, err)
2543+
assert.EqualValues(t, 30, imported, "should import all 30 exported documents")
2544+
2545+
count, err := coll.CountDocuments(t.Context(), bson.D{})
2546+
require.NoError(t, err)
2547+
assert.EqualValues(t, 30, count, "collection should have 30 documents")
2548+
for i := range int32(30) {
2549+
c, err := coll.CountDocuments(t.Context(), bson.D{{"a", i + 20}})
2550+
require.NoError(t, err)
2551+
assert.EqualValues(t, 1, c, "document with a=%d should exist", i+20)
2552+
}
2553+
}

test/qa-tests/jstests/export/sort_and_skip.js

Lines changed: 0 additions & 69 deletions
This file was deleted.

0 commit comments

Comments
 (0)