It("passes through calls to the underlying connection", func() { countingConn.Ping() Expect(underlyingConn.PingCallCount()).To(Equal(1)) }) It("returns the return values from the underlying connection", func() { underlyingConn.PingReturns(errors.New("disaster")) err := countingConn.Ping() Expect(err).To(MatchError("disaster")) }) Describe("query counting", func() { It("increments the global (;_;) counter", func() { _, err := countingConn.Query("SELECT $1::int", 1) Expect(err).NotTo(HaveOccurred()) Expect(metric.DatabaseQueries.Max()).To(Equal(1)) _, err = countingConn.Exec("SELECT $1::int", 1) Expect(err).NotTo(HaveOccurred()) Expect(metric.DatabaseQueries.Max()).To(Equal(2)) countingConn.QueryRow("SELECT $1::int", 1) Expect(metric.DatabaseQueries.Max()).To(Equal(3)) By("working in transactions") underlyingTx := &fakes.FakeTx{}
postgresRunner.CreateTestDB() realConn = postgresRunner.Open() underlyingConn.QueryStub = func(query string, args ...interface{}) (*sql.Rows, error) { return realConn.Query(query, args...) } }) AfterEach(func() { err := realConn.Close() Ω(err).ShouldNot(HaveOccurred()) postgresRunner.DropTestDB() }) It("does not EXPLAIN the query", func() { rows, err := explainConn.Query("SELECT $1::int", 1) Ω(err).ShouldNot(HaveOccurred()) err = rows.Close() Ω(err).ShouldNot(HaveOccurred()) Ω(underlyingConn.QueryCallCount()).Should(Equal(1)) query, args := underlyingConn.QueryArgsForCall(0) Ω(query).Should(Equal("SELECT $1::int")) Ω(args).Should(Equal(varargs(1))) }) }) Context("when the query takes more time than the timeout", func() { var realConn *sql.DB