add test for data.go
diff --git a/api.go b/api.go
index 79ed8d2..6afdbe3 100644
--- a/api.go
+++ b/api.go
@@ -37,6 +37,12 @@
)
const (
+ deploymentsEndpoint = "/configurations"
+ blobEndpointPath = "/blobs"
+ blobEndpoint = blobEndpointPath + "/{blobId}"
+)
+
+const (
API_ERR_BAD_BLOCK = iota + 1
API_ERR_INTERNAL
)
@@ -52,6 +58,10 @@
kindCollection = "Collection"
)
+const (
+ headerSteam = "application/octet-stream"
+)
+
type deploymentsResult struct {
deployments []DataDeployment
err error
@@ -83,12 +93,6 @@
ApiDeploymentsResponse []ApiDeploymentDetails `json:"contents"`
}
-const (
- deploymentsEndpoint = "/configurations"
- blobEndpointPath = "/blob"
- blobEndpoint = blobEndpointPath + "/{blobId}"
-)
-
type apiManagerInterface interface {
InitAPI()
addChangedDeployment(string)
@@ -197,6 +201,7 @@
}
*/
+// TODO use If-None-Match and ETag
func (a *apiManager) apiReturnBlobData(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
@@ -215,6 +220,7 @@
if err != nil {
a.writeInternalError(w, err.Error())
}
+ w.Header().Set("Content-type", headerSteam)
}
diff --git a/api_test.go b/api_test.go
index 4acd20a..d8d0668 100644
--- a/api_test.go
+++ b/api_test.go
@@ -34,31 +34,30 @@
)
var _ = Describe("api", func() {
- Context("GET /deployments", func() {
- var testCount int
- var dummyDbMan *dummyDbManager
- var testApiMan *apiManager
+ var testCount int
+ var dummyDbMan *dummyDbManager
+ var testApiMan *apiManager
- var _ = BeforeEach(func() {
- testCount += 1
- dummyDbMan = &dummyDbManager{}
- testApiMan = &apiManager{
- dbMan: dummyDbMan,
- deploymentsEndpoint: deploymentsEndpoint + strconv.Itoa(testCount),
- blobEndpoint: blobEndpointPath + strconv.Itoa(testCount) + "/{blobId}",
- eTag: int64(testCount * 10),
- deploymentsChanged: make(chan interface{}, 5),
- addSubscriber: make(chan chan deploymentsResult),
- removeSubscriber: make(chan chan deploymentsResult),
- }
- testApiMan.InitAPI()
- time.Sleep(100 * time.Millisecond)
- })
+ var _ = BeforeEach(func() {
+ testCount += 1
+ dummyDbMan = &dummyDbManager{}
+ testApiMan = &apiManager{
+ dbMan: dummyDbMan,
+ deploymentsEndpoint: deploymentsEndpoint + strconv.Itoa(testCount),
+ blobEndpoint: blobEndpointPath + strconv.Itoa(testCount) + "/{blobId}",
+ eTag: int64(testCount * 10),
+ deploymentsChanged: make(chan interface{}, 5),
+ addSubscriber: make(chan chan deploymentsResult),
+ removeSubscriber: make(chan chan deploymentsResult),
+ }
+ testApiMan.InitAPI()
+ time.Sleep(100 * time.Millisecond)
+ })
- var _ = AfterEach(func() {
- testApiMan = nil
- })
-
+ var _ = AfterEach(func() {
+ testApiMan = nil
+ })
+ Context("GET /configurations", func() {
It("should get empty set if no deployments", func() {
// setup http client
uri, err := url.Parse(testUrl)
@@ -144,6 +143,7 @@
Expect(res.StatusCode).To(Equal(http.StatusNotModified))
})
+ // block is not enabled now
XIt("should get empty set after blocking if no deployments", func() {
start := time.Now()
@@ -242,6 +242,37 @@
})
})
+
+ Context("GET /blobs", func() {
+ It("should get file bytesfrom endpoint", func() {
+ // setup http client
+ uri, err := url.Parse(testUrl)
+ Expect(err).Should(Succeed())
+ uri.Path = blobEndpointPath + strconv.Itoa(testCount) + "/test"
+
+ // set test data
+ testFile, err := ioutil.TempFile(bundlePath, "test")
+ randString := GenerateUUID()
+ testFile.Write([]byte(randString))
+ err = testFile.Close()
+ Expect(err).Should(Succeed())
+ dummyDbMan.localFSLocation = testFile.Name()
+
+ log.Debug("randString: " + randString)
+
+ // http get
+ res, err := http.Get(uri.String())
+ Expect(err).Should(Succeed())
+ defer res.Body.Close()
+ Expect(res.StatusCode).Should(Equal(http.StatusOK))
+
+ // parse response
+ body, err := ioutil.ReadAll(res.Body)
+ Expect(err).Should(Succeed())
+ Expect(string(body)).Should(Equal(randString))
+ })
+ })
+
})
func setTestDeployments(dummyDbMan *dummyDbManager, self string) []ApiDeploymentDetails {
@@ -305,6 +336,7 @@
type dummyDbManager struct {
unreadyDeployments []DataDeployment
readyDeployments []DataDeployment
+ localFSLocation string
}
func (d *dummyDbManager) setDbVersion(version string) {
@@ -328,7 +360,7 @@
}
func (d *dummyDbManager) getLocalFSLocation(string) (string, error) {
- return "", nil
+ return d.localFSLocation, nil
}
func GenerateUUID() string {
diff --git a/data_test.go b/data_test.go
new file mode 100644
index 0000000..e57e56f
--- /dev/null
+++ b/data_test.go
@@ -0,0 +1,119 @@
+// Copyright 2017 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package apiGatewayConfDeploy
+
+import (
+ "github.com/30x/apid-core"
+ "github.com/30x/apid-core/data"
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+ "strconv"
+ "sync"
+ "time"
+)
+
+var _ = Describe("data", func() {
+ var testCount int
+ var testDbMan *dbManager
+ var _ = BeforeEach(func() {
+ testCount += 1
+ testDbMan = &dbManager{
+ data: services.Data(),
+ dbMux: sync.RWMutex{},
+ }
+ testDbMan.setDbVersion("test" + strconv.Itoa(testCount))
+ initTestDb(testDbMan.getDb())
+ testDbMan.initDb()
+ time.Sleep(100 * time.Millisecond)
+ })
+
+ var _ = AfterEach(func() {
+ testDbMan = nil
+ data.Delete(data.VersionedDBID("common", "test"+strconv.Itoa(testCount)))
+ })
+
+ Context("db tests", func() {
+ It("should succefully initialized tables", func() {
+ // edgex_blob_available
+ rows, err := testDbMan.getDb().Query(`
+ SELECT count(*) from edgex_blob_available;
+ `)
+ Expect(err).Should(Succeed())
+ defer rows.Close()
+ var count int
+ for rows.Next() {
+ rows.Scan(&count)
+ }
+ Expect(count).Should(Equal(0))
+
+ // metadata_runtime_entity_metadata
+ rows, err = testDbMan.getDb().Query(`
+ SELECT count(*) from metadata_runtime_entity_metadata;
+ `)
+ Expect(err).Should(Succeed())
+ defer rows.Close()
+ for rows.Next() {
+ rows.Scan(&count)
+ }
+ Expect(count).Should(Equal(1))
+ })
+
+ })
+
+})
+
+//initialize DB for tests
+func initTestDb(db apid.DB) {
+ _, err := db.Exec(`
+ CREATE TABLE metadata_runtime_entity_metadata (
+ id text,
+ organization_id text,
+ environment_id text,
+ bean_blob_id text,
+ resource_blob_id text,
+ type text,
+ name text,
+ revision text,
+ path text,
+ created_at blob,
+ created_by text,
+ updated_at blob,
+ updated_by text,
+ _change_selector text,
+ primary key (id));
+ `)
+ Expect(err).Should(Succeed())
+
+ _, err = db.Exec(`
+ INSERT INTO "metadata_runtime_entity_metadata" VALUES(
+ '1dc4895e-6494-4b59-979f-5f4c89c073b4',
+ '73fcac6c-5d9f-44c1-8db0-333efda3e6e8',
+ '',
+ 'gcs:SHA-512:39ca7ae89bb9468af34df8bc873748b4035210c91bcc01359c092c1d51364b5f3df06bc69a40621acfaa46791af9ea41bc0f3429a84738ba1a7c8d394859601a',
+ '',
+ 'ORGANIZATION',
+ 'Org1',
+ '',
+ '/organizations/Org1/',
+ '2017-06-27 03:14:45.748+00:00',
+ 'defaultUser',
+ '2017-06-27 03:15:03.557+00:00',
+ 'defaultUser',
+ '73fcac6c-5d9f-44c1-8db0-333efda3e6e8'
+ );
+ `)
+ Expect(err).Should(Succeed())
+
+}
diff --git a/init.go b/init.go
index bc8f2a9..fd12337 100644
--- a/init.go
+++ b/init.go
@@ -38,6 +38,7 @@
configConcurrentDownloads = "apigeesync_concurrent_downloads"
configDownloadQueueSize = "apigeesync_download_queue_size"
configBlobServerBaseURI = "apigeesync_blob_server_base"
+ configStoragePath = "local_storage_path"
)
var (
@@ -140,7 +141,7 @@
blobServerURL = config.GetString(configBlobServerBaseURI)
relativeBundlePath := config.GetString(configBundleDirKey)
- storagePath := config.GetString("local_storage_path")
+ storagePath := config.GetString(configStoragePath)
bundlePath = path.Join(storagePath, relativeBundlePath)
if err := os.MkdirAll(bundlePath, 0700); err != nil {
return pluginData, fmt.Errorf("Failed bundle directory creation: %v", err)