@@ -74,6 +74,65 @@ func TestDiagnosticDataCollector(t *testing.T) {
74
74
assert .NoError (t , err )
75
75
}
76
76
77
+ func TestDiagnosticDataCollectorWithCompatibleMode (t * testing.T ) {
78
+ ctx , cancel := context .WithTimeout (context .Background (), 3 * time .Second )
79
+ defer cancel ()
80
+
81
+ client := tu .DefaultTestClient (ctx , t )
82
+ logger := logrus .New ()
83
+ ti := labelsGetterMock {}
84
+
85
+ serverVersion , err := getMongoDBVersion (t , client , ctx , logger )
86
+ if err != nil {
87
+ assert .Fail (t , err .Error ())
88
+ return
89
+ }
90
+
91
+ c := newDiagnosticDataCollector (ctx , client , logger , true , ti )
92
+
93
+ // The last \n at the end of this string is important
94
+ expected := strings .NewReader (fmt .Sprintf (`
95
+ # HELP mongodb_version_info The server version
96
+ # TYPE mongodb_version_info gauge
97
+ mongodb_version_info{edition="Community",mongodb="%s"} 1` , serverVersion ) + "\n " )
98
+
99
+ // Filter metrics for 2 reasons:
100
+ // 1. The result is huge
101
+ // 2. We need to check against know values. Don't use metrics that return counters like uptime
102
+ // or counters like the number of transactions because they won't return a known value to compare
103
+ filter := []string {
104
+ "mongodb_version_info" ,
105
+ }
106
+
107
+ err = testutil .CollectAndCompare (c , expected , filter ... )
108
+ assert .NoError (t , err )
109
+ }
110
+
111
+ func getMongoDBVersion (t * testing.T , client * mongo.Client , ctx context.Context , logger * logrus.Logger ) (string , error ) {
112
+ var m bson.M
113
+ cmd := bson.D {{Key : "getDiagnosticData" , Value : "1" }}
114
+ res := client .Database ("admin" ).RunCommand (ctx , cmd )
115
+ if res .Err () != nil {
116
+ return "" , res .Err ()
117
+ }
118
+
119
+ if err := res .Decode (& m ); err != nil {
120
+ logger .Errorf ("cannot run getDiagnosticData: %s" , err )
121
+ }
122
+
123
+ m , ok := m ["data" ].(bson.M )
124
+ if ! ok {
125
+ return "" , errors .New ("cannot decode getDiagnosticData" )
126
+ }
127
+
128
+ v := walkTo (m , []string {"serverStatus" , "version" })
129
+ serverVersion , ok := v .(string )
130
+ if ! ok {
131
+ serverVersion = "server version is unavailable"
132
+ }
133
+ return serverVersion , nil
134
+ }
135
+
77
136
func TestAllDiagnosticDataCollectorMetrics (t * testing.T ) {
78
137
ctx , cancel := context .WithTimeout (context .Background (), 3 * time .Second )
79
138
defer cancel ()
@@ -229,7 +288,7 @@ func TestDisconnectedDiagnosticDataCollector(t *testing.T) {
229
288
mongodb_mongod_storage_engine{engine="Engine is unavailable"} 1
230
289
# HELP mongodb_version_info The server version
231
290
# TYPE mongodb_version_info gauge
232
- mongodb_version_info{mongodb="server version is unavailable"} 1` + "\n " )
291
+ mongodb_version_info{edition="", mongodb="server version is unavailable"} 1` + "\n " )
233
292
// Filter metrics for 2 reasons:
234
293
// 1. The result is huge
235
294
// 2. We need to check against know values. Don't use metrics that return counters like uptime
0 commit comments