...
1
2
3
4
5
6
7 package integration
8
9 import (
10 "context"
11 "os"
12 "testing"
13
14 "go.mongodb.org/mongo-driver/bson"
15 "go.mongodb.org/mongo-driver/internal/integtest"
16 "go.mongodb.org/mongo-driver/internal/require"
17 "go.mongodb.org/mongo-driver/mongo/writeconcern"
18 "go.mongodb.org/mongo-driver/x/bsonx/bsoncore"
19 "go.mongodb.org/mongo-driver/x/mongo/driver/operation"
20 )
21
22 func TestCompression(t *testing.T) {
23 comp := os.Getenv("MONGO_GO_DRIVER_COMPRESSOR")
24 if len(comp) == 0 {
25 t.Skip("Skipping because no compressor specified")
26 }
27
28 wc := writeconcern.New(writeconcern.WMajority())
29 collOne := integtest.ColName(t)
30
31 dropCollection(t, integtest.DBName(t), collOne)
32 insertDocs(t, integtest.DBName(t), collOne, wc,
33 bsoncore.BuildDocument(nil, bsoncore.AppendStringElement(nil, "name", "compression_test")),
34 )
35
36 cmd := operation.NewCommand(bsoncore.BuildDocument(nil, bsoncore.AppendInt32Element(nil, "serverStatus", 1))).
37 Deployment(integtest.Topology(t)).
38 Database(integtest.DBName(t))
39
40 ctx := context.Background()
41 err := cmd.Execute(ctx)
42 noerr(t, err)
43 result := cmd.Result()
44
45 serverVersion, err := result.LookupErr("version")
46 noerr(t, err)
47
48 if integtest.CompareVersions(t, serverVersion.StringValue(), "3.4") < 0 {
49 t.Skip("skipping compression test for version < 3.4")
50 }
51
52 networkVal, err := result.LookupErr("network")
53 noerr(t, err)
54
55 require.Equal(t, networkVal.Type, bson.TypeEmbeddedDocument)
56
57 compressionVal, err := networkVal.Document().LookupErr("compression")
58 noerr(t, err)
59
60 compressorDoc, err := compressionVal.Document().LookupErr(comp)
61 noerr(t, err)
62
63 compressorKey := "compressor"
64 compareTo36 := integtest.CompareVersions(t, serverVersion.StringValue(), "3.6")
65 if compareTo36 < 0 {
66 compressorKey = "compressed"
67 }
68 compressor, err := compressorDoc.Document().LookupErr(compressorKey)
69 noerr(t, err)
70
71 bytesIn, err := compressor.Document().LookupErr("bytesIn")
72 noerr(t, err)
73
74 require.True(t, bytesIn.IsNumber())
75 require.True(t, bytesIn.Int64() > 0)
76 }
77
View as plain text