func (db *SQLDB) convertPostgresError(err *pq.Error) *models.Error { switch err.Code { case "22001": return models.ErrBadRequest case "23505": return models.ErrResourceExists case "42P01": return models.NewUnrecoverableError(err) default: return models.ErrUnknownError } }
func (db *SQLDB) convertMySQLError(err *mysql.MySQLError) *models.Error { switch err.Number { case 1062: return models.ErrResourceExists case 1213: return models.ErrDeadlock case 1406: return models.ErrBadRequest case 1146: return models.NewUnrecoverableError(err) default: return models.ErrUnknownError } return nil }
Expect(responseRecorder.Code).To(Equal(http.StatusOK)) response := models.TasksResponse{} err := response.Unmarshal(responseRecorder.Body.Bytes()) Expect(err).NotTo(HaveOccurred()) Expect(response.Error).To(BeNil()) Expect(response.Tasks).To(HaveLen(2)) Expect(response.Tasks[0]).To(Equal(task1.VersionDownTo(format.V0))) Expect(response.Tasks[1]).To(Equal(task2.VersionDownTo(format.V0))) }) }) }) Context("when the DB returns an unrecoverable error", func() { BeforeEach(func() { fakeTaskDB.TasksReturns(nil, models.NewUnrecoverableError(nil)) }) It("logs and writes to the exit channel", func() { Eventually(logger).Should(gbytes.Say("unrecoverable-error")) Eventually(exitCh).Should(Receive()) }) }) Context("when the DB errors out", func() { BeforeEach(func() { fakeTaskDB.TasksReturns(nil, models.ErrUnknownError) }) It("provides relevant error information", func() { Expect(responseRecorder.Code).To(Equal(http.StatusOK))
}) It("returns an empty list", func() { Expect(responseRecorder.Code).To(Equal(http.StatusOK)) response := &models.ActualLRPGroupsResponse{} err := response.Unmarshal(responseRecorder.Body.Bytes()) Expect(err).NotTo(HaveOccurred()) Expect(response.Error).To(BeNil()) Expect(response.ActualLrpGroups).To(BeNil()) }) }) Context("when the DB returns an unrecoverable error", func() { BeforeEach(func() { fakeActualLRPDB.ActualLRPGroupsReturns([]*models.ActualLRPGroup{}, models.NewUnrecoverableError(nil)) }) It("logs and writes to the exit channel", func() { Eventually(logger).Should(gbytes.Say("unrecoverable-error")) Eventually(exitCh).Should(Receive()) }) }) Context("when the DB errors out", func() { BeforeEach(func() { fakeActualLRPDB.ActualLRPGroupsReturns([]*models.ActualLRPGroup{}, models.ErrUnknownError) }) It("provides relevant error information", func() { Expect(responseRecorder.Code).To(Equal(http.StatusOK))
requestBody = &models.TasksRequest{ CellId: "cell-id", } }) It("calls the DB with a cell filter", func() { Expect(fakeTaskDB.TasksCallCount()).To(Equal(1)) _, filter := fakeTaskDB.TasksArgsForCall(0) Expect(filter.CellID).To(Equal("cell-id")) }) }) }) Context("when the DB returns an unrecoverable error", func() { BeforeEach(func() { fakeTaskDB.TasksReturns(nil, models.NewUnrecoverableError(nil)) }) It("logs and writes to the exit channel", func() { Eventually(logger).Should(gbytes.Say("unrecoverable-error")) Eventually(exitCh).Should(Receive()) }) }) Context("when the DB errors out", func() { BeforeEach(func() { fakeTaskDB.TasksReturns(nil, models.ErrUnknownError) }) It("provides relevant error information", func() { Expect(responseRecorder.Code).To(Equal(http.StatusOK))
It("responds with an error", func() { Expect(responseRecorder.Code).To(Equal(http.StatusOK)) var response models.RemoveEvacuatingActualLRPResponse err := response.Unmarshal(responseRecorder.Body.Bytes()) Expect(err).NotTo(HaveOccurred()) Expect(response.Error).NotTo(BeNil()) Expect(response.Error).To(Equal(models.ErrBadRequest)) }) }) Context("when the DB returns an unrecoverable error", func() { BeforeEach(func() { fakeEvacuationDB.RemoveEvacuatingActualLRPReturns(models.NewUnrecoverableError(nil)) }) It("logs and writes to the exit channel", func() { Eventually(logger).Should(gbytes.Say("unrecoverable-error")) Eventually(exitCh).Should(Receive()) }) }) Context("when DB errors out", func() { BeforeEach(func() { fakeEvacuationDB.RemoveEvacuatingActualLRPReturns(models.ErrUnknownError) }) It("responds with an error", func() { Expect(responseRecorder.Code).To(Equal(http.StatusOK))
It("returns an empty list", func() { Expect(responseRecorder.Code).To(Equal(http.StatusOK)) response := &models.CellsResponse{} err := response.Unmarshal(responseRecorder.Body.Bytes()) Expect(err).NotTo(HaveOccurred()) Expect(response.Error).To(BeNil()) Expect(response.Cells).To(BeNil()) }) }) Context("when the DB returns an unrecoverable error", func() { BeforeEach(func() { fakeServiceClient.CellsReturns(nil, models.NewUnrecoverableError(nil)) }) It("logs and writes to the exit channel", func() { Eventually(logger).Should(gbytes.Say("unrecoverable-error")) Eventually(exitCh).Should(Receive()) }) }) Context("when the serviceClient errors out", func() { BeforeEach(func() { fakeServiceClient.CellsReturns(nil, models.ErrUnknownError) }) It("provides relevant error information", func() { Expect(responseRecorder.Code).To(Equal(http.StatusOK))