func readRecordFromPod(oc *exutil.CLI, podName string) error { // don't include _id field to output because it changes every time findCmd := "rs.slaveOk(); printjson(db.test.find({}, {_id: 0}).toArray())" fmt.Fprintf(g.GinkgoWriter, "DEBUG: reading record from the pod %v\n", podName) mongoPod := dbutil.NewMongoDB(podName) // pod is running but we need to wait when it will be really ready // (will become a member of replica set and will finish data sync) return exutil.WaitForQueryOutputContains(oc, mongoPod, 1*time.Minute, false, findCmd, `{ "status" : "passed" }`) }
func tryToReadFromPod(oc *exutil.CLI, podName, expectedValue string) { // don't include _id field to output because it changes every time findCmd := "rs.slaveOk(); printjson(db.bar.find({}, {_id: 0}).toArray())" fmt.Fprintf(g.GinkgoWriter, "DEBUG: reading record from pod %v\n", podName) mongoPod := db.NewMongoDB(podName) result, err := mongoPod.Query(oc, findCmd) o.Expect(err).ShouldNot(o.HaveOccurred()) o.Expect(result).Should(o.ContainSubstring(expectedValue)) }
} o.Expect(err).ShouldNot(o.HaveOccurred()) g.By("expecting the mongodb pod is running") podNames, err := exutil.WaitForPods( oc.KubeREST().Pods(oc.Namespace()), exutil.ParseLabelsOrDie("name=mongodb"), exutil.CheckPodIsRunningFn, 1, 1*time.Minute, ) o.Expect(err).ShouldNot(o.HaveOccurred()) o.Expect(podNames).Should(o.HaveLen(1)) g.By("expecting the mongodb service is answering for ping") mongo := db.NewMongoDB(podNames[0]) ok, err := mongo.IsReady(oc) o.Expect(err).ShouldNot(o.HaveOccurred()) o.Expect(ok).Should(o.BeTrue()) g.By("expecting that we can insert a new record") result, err := mongo.Query(oc, `db.foo.save({ "status": "passed" })`) o.Expect(err).ShouldNot(o.HaveOccurred()) o.Expect(result).Should(o.ContainSubstring(`WriteResult({ "nInserted" : 1 })`)) g.By("expecting that we can read a record") findCmd := "printjson(db.foo.find({}, {_id: 0}).toArray())" // don't include _id field to output because it changes every time result, err = mongo.Query(oc, findCmd) o.Expect(err).ShouldNot(o.HaveOccurred()) o.Expect(result).Should(o.ContainSubstring(`{ "status" : "passed" }`)) })
).Execute(), ).Should(o.Succeed()) g.By("waiting for pods to running") podNames, err := exutil.WaitForPods( oc.KubeREST().Pods(oc.Namespace()), exutil.ParseLabelsOrDie("name=mongodb-replicaset"), exutil.CheckPodIsRunningFn, 3, 2*time.Minute, ) o.Expect(err).NotTo(o.HaveOccurred()) o.Expect(podNames).Should(o.HaveLen(3)) g.By("expecting that we can insert a new record on primary node") mongo := dbutil.NewMongoDB(podNames[0]) replicaSet := mongo.(exutil.ReplicaSet) _, err = replicaSet.QueryPrimary(oc, `db.test.save({ "status" : "passed" })`) o.Expect(err).ShouldNot(o.HaveOccurred()) g.By("expecting that we can read a record from all members") for _, podName := range podNames { o.Expect(readRecordFromPod(oc, podName)).To(o.Succeed()) } g.By("restarting replica set") err = oc.Run("delete").Args("pods", "--all", "-n", oc.Namespace()).Execute() o.Expect(err).ShouldNot(o.HaveOccurred()) g.By("waiting for restarting of the pods") podNames, err = exutil.WaitForPods(