Skip to content

Commit 9c9dbd5

Browse files
committed
Convert test/qa-tests/jstests/export/field_file.js to Go
1 parent c84b444 commit 9c9dbd5

2 files changed

Lines changed: 89 additions & 60 deletions

File tree

mongoimport/mongoimport_test.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1797,3 +1797,92 @@ func TestRoundTripViewExport(t *testing.T) {
17971797
require.NoError(t, err)
17981798
assert.EqualValues(t, 4, n, "restored view should have correct number of rows")
17991799
}
1800+
1801+
// TestRoundTripFieldFile verifies that mongoexport --fieldFile limits exported
1802+
// fields, and that mongoimport correctly restores the filtered data (from field_file.js).
1803+
func TestRoundTripFieldFile(t *testing.T) {
1804+
testtype.SkipUnlessTestType(t, testtype.IntegrationTestType)
1805+
1806+
const dbName = "mongoimport_roundtrip_fieldfile_test"
1807+
1808+
sessionProvider, _, err := testutil.GetBareSessionProvider()
1809+
require.NoError(t, err)
1810+
client, err := sessionProvider.GetSession()
1811+
require.NoError(t, err)
1812+
t.Cleanup(func() {
1813+
if err := client.Database(dbName).Drop(context.Background()); err != nil {
1814+
t.Errorf("dropping test database: %v", err)
1815+
}
1816+
})
1817+
1818+
db := client.Database(dbName)
1819+
_, err = db.Collection("source").InsertMany(t.Context(), []any{
1820+
bson.D{{"a", int32(1)}},
1821+
bson.D{{"a", int32(1)}, {"b", int32(1)}},
1822+
bson.D{{"a", int32(1)}, {"b", int32(2)}, {"c", int32(3)}},
1823+
})
1824+
require.NoError(t, err)
1825+
1826+
fieldFile, err := os.CreateTemp(t.TempDir(), "fields-*.txt")
1827+
require.NoError(t, err)
1828+
_, err = fieldFile.WriteString("a\nb\n")
1829+
require.NoError(t, err)
1830+
require.NoError(t, fieldFile.Close())
1831+
1832+
exportTarget, err := os.CreateTemp(t.TempDir(), "export-*.csv")
1833+
require.NoError(t, err)
1834+
require.NoError(t, exportTarget.Close())
1835+
1836+
exportToolOptions, err := testutil.GetToolOptions()
1837+
require.NoError(t, err)
1838+
exportToolOptions.Namespace = &options.Namespace{DB: dbName, Collection: "source"}
1839+
me, err := mongoexport.New(mongoexport.Options{
1840+
ToolOptions: exportToolOptions,
1841+
OutputFormatOptions: &mongoexport.OutputFormatOptions{
1842+
Type: "csv",
1843+
JSONFormat: "canonical",
1844+
FieldFile: fieldFile.Name(),
1845+
},
1846+
InputOptions: &mongoexport.InputOptions{},
1847+
})
1848+
require.NoError(t, err)
1849+
defer me.Close()
1850+
1851+
f, err := os.OpenFile(exportTarget.Name(), os.O_WRONLY, 0o644)
1852+
require.NoError(t, err)
1853+
_, err = me.Export(f)
1854+
require.NoError(t, err)
1855+
require.NoError(t, f.Close())
1856+
1857+
fields := "a,b,c"
1858+
importToolOptions, err := testutil.GetToolOptions()
1859+
require.NoError(t, err)
1860+
importToolOptions.Namespace = &options.Namespace{DB: dbName, Collection: "dest"}
1861+
mi, err := New(Options{
1862+
ToolOptions: importToolOptions,
1863+
InputOptions: &InputOptions{
1864+
File: exportTarget.Name(),
1865+
Type: "csv",
1866+
Fields: &fields,
1867+
ParseGrace: "stop",
1868+
},
1869+
IngestOptions: &IngestOptions{},
1870+
})
1871+
require.NoError(t, err)
1872+
_, _, err = mi.ImportDocuments()
1873+
require.NoError(t, err)
1874+
1875+
dest := db.Collection("dest")
1876+
n, err := dest.CountDocuments(t.Context(), bson.D{{"a", int32(1)}})
1877+
require.NoError(t, err)
1878+
assert.EqualValues(t, 3, n, "3 documents should have a=1")
1879+
n, err = dest.CountDocuments(t.Context(), bson.D{{"b", int32(1)}})
1880+
require.NoError(t, err)
1881+
assert.EqualValues(t, 1, n, "1 document should have b=1")
1882+
n, err = dest.CountDocuments(t.Context(), bson.D{{"b", int32(2)}})
1883+
require.NoError(t, err)
1884+
assert.EqualValues(t, 1, n, "1 document should have b=2")
1885+
n, err = dest.CountDocuments(t.Context(), bson.D{{"c", int32(3)}})
1886+
require.NoError(t, err)
1887+
assert.EqualValues(t, 0, n, "c=3 should not have been exported (not in fieldFile)")
1888+
}

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

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

0 commit comments

Comments
 (0)