func (cmd *ATCCommand) constructDB(logger lager.Logger) (*db.SQLDB, db.PipelineDBFactory, error) { dbConn, err := migrations.LockDBAndMigrate(logger.Session("db.migrations"), "postgres", cmd.PostgresDataSource) if err != nil { return nil, nil, fmt.Errorf("failed to migrate database: %s", err) } listener := pq.NewListener(cmd.PostgresDataSource, time.Second, time.Minute, nil) bus := db.NewNotificationsBus(listener, dbConn) explainDBConn := db.Explain(logger, dbConn, clock.NewClock(), 500*time.Millisecond) countingDBConn := metric.CountQueries(explainDBConn) sqlDB := db.NewSQL(logger.Session("db"), countingDBConn, bus) pipelineDBFactory := db.NewPipelineDBFactory(logger.Session("db"), explainDBConn, bus, sqlDB) return sqlDB, pipelineDBFactory, err }
"github.com/concourse/atc/db/fakes" "github.com/concourse/atc/metric" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("Counting Database Queries", func() { var ( underlyingConn *fakes.FakeConn countingConn db.Conn ) BeforeEach(func() { underlyingConn = new(fakes.FakeConn) countingConn = metric.CountQueries(underlyingConn) }) AfterEach(func() { err := countingConn.Close() Expect(err).NotTo(HaveOccurred()) }) 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"))