Fix timing issue with bundle downloads
diff --git a/api.go b/api.go index 9ce3bea..09a4d17 100644 --- a/api.go +++ b/api.go
@@ -68,7 +68,7 @@ } } case subscriber := <-addSubscriber: - log.Debugf("Add subscriber: %s", subscriber) + log.Debugf("Add subscriber: %v", subscriber) subscribers[subscriber] = struct{}{} } }
diff --git a/api_test.go b/api_test.go index 1076ff8..669f3e0 100644 --- a/api_test.go +++ b/api_test.go
@@ -127,12 +127,20 @@ Expect(depRes.DeploymentID).Should(Equal(deploymentID)) + for _, bundle := range depRes.Bundles { + uri, err := url.Parse(bundle.URI) + Expect(err).ShouldNot(HaveOccurred()) + bContent, err := ioutil.ReadFile(uri.Path) + Expect(err).ShouldNot(HaveOccurred()) + content := string(bContent) + Expect(content).Should(HavePrefix("/bundle/")) + } + close(done) }() - time.Sleep(50 * time.Millisecond) // make sure API call is made and blocks - insertTestDeployment(testServer, deploymentID) - incoming <- deploymentID + time.Sleep(25 * time.Millisecond) // give api call above time to block + triggerDeploymentEvent(deploymentID) }) It("should get 304 after blocking if no new deployment", func() {
diff --git a/data.go b/data.go index 45d2cc1..0fd46b9 100644 --- a/data.go +++ b/data.go
@@ -118,8 +118,6 @@ } log.Debugf("INSERT gateway_deploy_deployment %s succeeded", depID) - - incoming <- depID return err } @@ -191,6 +189,11 @@ } log.Debugf("UPDATE gateway_deploy_deployment %s succeeded", depID) + + if status == DEPLOYMENT_STATE_READY { + incoming<- depID + } + return nil }
diff --git a/deployments.go b/deployments.go index ea7c81a..8fe22f4 100644 --- a/deployments.go +++ b/deployments.go
@@ -99,7 +99,7 @@ return nil, err } if res.StatusCode != 200 { - return nil, fmt.Errorf("Bundle uri %s failed with status %s", uriString, res.StatusCode) + return nil, fmt.Errorf("Bundle uri %s failed with status %d", uriString, res.StatusCode) } return res.Body, nil } @@ -120,6 +120,7 @@ log.Errorf("Unable to create temp file: %v", err) return } + defer tempFile.Close() fileName = tempFile.Name() var bundleReader io.ReadCloser @@ -136,11 +137,7 @@ return } - err = tempFile.Close() - if err != nil { - log.Errorf("Unable to close file %s: %v", tempFile, err) - } - + log.Debugf("Bundle downloaded: %s", bun.URI) return } @@ -210,7 +207,7 @@ bun := dep.Bundles[i] go func() { err := prepareBundle(depID, bun) - errorsChan <- err + errorsChan<- err if err != nil { id := string(i) err = updateBundleStatus(db, depID, id, DEPLOYMENT_STATE_ERR_APID, ERROR_CODE_TODO, err.Error())
diff --git a/listener.go b/listener.go index 915a6b5..39e35c2 100644 --- a/listener.go +++ b/listener.go
@@ -68,8 +68,6 @@ db := getDB() for _, change := range changes.Changes { - log.Debugf("change table: %s operation: %s", change.Table, change.Operation) - var err error switch change.Table { case MANIFEST_TABLE:
diff --git a/listener_test.go b/listener_test.go index a7cb03f..7160f35 100644 --- a/listener_test.go +++ b/listener_test.go
@@ -85,40 +85,7 @@ deploymentID := "listener_test_2" - uri, err := url.Parse(testServer.URL) - Expect(err).ShouldNot(HaveOccurred()) - uri.Path = "/bundle/1" - bundleUri := uri.String() - - dep := deployment{ - DeploymentID: deploymentID, - System: bundle{ - URI: bundleUri, - }, - Bundles: []bundle{ - { - BundleID: "/bundle/1", - URI: bundleUri, - Scope: "some-scope", - }, - }, - } - - depBytes, err := json.Marshal(dep) - Expect(err).ShouldNot(HaveOccurred()) - - row := common.Row{} - row["id"] = &common.ColumnVal{Value: deploymentID} - row["manifest_body"] = &common.ColumnVal{Value: string(depBytes)} - - var event = common.ChangeList{} - event.Changes = []common.Change{ - { - Operation: common.Insert, - Table: MANIFEST_TABLE, - NewRow: row, - }, - } + var dep deployment h := &test_handler{ deploymentID, @@ -138,7 +105,9 @@ } apid.Events().Listen(APIGEE_SYNC_EVENT, h) - apid.Events().Emit(APIGEE_SYNC_EVENT, &event) // for standard listener + + dep = triggerDeploymentEvent(deploymentID) + apid.Events().Emit(APIGEE_SYNC_EVENT, &common.ChangeList{}) // for test listener }) }) @@ -175,3 +144,45 @@ Expect(string(bytes)).Should(Equal(b.BundleID)) } } + +func triggerDeploymentEvent(deploymentID string) deployment { + + uri, err := url.Parse(testServer.URL) + Expect(err).ShouldNot(HaveOccurred()) + uri.Path = "/bundle/1" + bundleUri := uri.String() + + dep := deployment{ + DeploymentID: deploymentID, + System: bundle{ + URI: bundleUri, + }, + Bundles: []bundle{ + { + BundleID: "/bundle/1", + URI: bundleUri, + Scope: "some-scope", + }, + }, + } + + depBytes, err := json.Marshal(dep) + Expect(err).ShouldNot(HaveOccurred()) + + row := common.Row{} + row["id"] = &common.ColumnVal{Value: deploymentID} + row["manifest_body"] = &common.ColumnVal{Value: string(depBytes)} + + var event = common.ChangeList{} + event.Changes = []common.Change{ + { + Operation: common.Insert, + Table: MANIFEST_TABLE, + NewRow: row, + }, + } + + apid.Events().Emit(APIGEE_SYNC_EVENT, &event) + + return dep +}