From 4e6214514fcbd53990fa1c0354b38429cd75d6f7 Mon Sep 17 00:00:00 2001 From: "Frederick F. Kautz IV" Date: Fri, 7 Nov 2014 19:07:16 -0800 Subject: [PATCH] Moving bucket request channel to private config option --- gateway.go | 23 ++++++++++++----------- gateway_test.go | 26 ++++++++++++++++---------- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/gateway.go b/gateway.go index b85816633..cac1b0c4d 100644 --- a/gateway.go +++ b/gateway.go @@ -10,7 +10,8 @@ import ( // Stores system configuration, populated from CLI or test runner type GatewayConfig struct { - StorageDriver StorageDriver + StorageDriver StorageDriver + requestBucketChan chan BucketRequest } // Message for requesting a bucket @@ -37,7 +38,7 @@ type StorageDriver func(bucket string, input chan ObjectRequest) type fakeContext struct{} type GatewayGetHandler struct { - requestBucketChan chan BucketRequest + config GatewayConfig } // GET requests server @@ -47,7 +48,7 @@ func (handler GatewayGetHandler) ServeHTTP(w http.ResponseWriter, req *http.Requ path := vars["path"] context := fakeContext{} callback := make(chan Bucket) - handler.requestBucketChan <- BucketRequest{ + handler.config.requestBucketChan <- BucketRequest{ name: bucketName, context: context, callback: callback, @@ -64,7 +65,7 @@ func (handler GatewayGetHandler) ServeHTTP(w http.ResponseWriter, req *http.Requ } type GatewayPutHandler struct { - requestBucketChan chan BucketRequest + config GatewayConfig } func (handler GatewayPutHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { @@ -74,7 +75,7 @@ func (handler GatewayPutHandler) ServeHTTP(w http.ResponseWriter, req *http.Requ object, _ := ioutil.ReadAll(req.Body) context := fakeContext{} callback := make(chan Bucket) - handler.requestBucketChan <- BucketRequest{ + handler.config.requestBucketChan <- BucketRequest{ name: bucketName, context: context, callback: callback, @@ -84,17 +85,17 @@ func (handler GatewayPutHandler) ServeHTTP(w http.ResponseWriter, req *http.Requ } func RegisterGatewayHandlers(router *mux.Router, config GatewayConfig) { - requestBucketChan := make(chan BucketRequest) - go SynchronizedBucketService(requestBucketChan, config) - getHandler := GatewayGetHandler{requestBucketChan: requestBucketChan} - putHandler := GatewayPutHandler{requestBucketChan: requestBucketChan} + config.requestBucketChan = make(chan BucketRequest) + go SynchronizedBucketService(config) + getHandler := GatewayGetHandler{config} + putHandler := GatewayPutHandler{config} router.Handle("/{bucket}/{path:.*}", getHandler).Methods("GET") router.Handle("/{bucket}/{path:.*}", putHandler).Methods("PUT") } -func SynchronizedBucketService(input chan BucketRequest, config GatewayConfig) { +func SynchronizedBucketService(config GatewayConfig) { buckets := make(map[string]*SynchronizedBucket) - for request := range input { + for request := range config.requestBucketChan { if buckets[request.name] == nil { bucketChannel := make(chan ObjectRequest) go config.StorageDriver(request.name, bucketChannel) diff --git a/gateway_test.go b/gateway_test.go index e8e527ccc..f343cdf77 100644 --- a/gateway_test.go +++ b/gateway_test.go @@ -57,15 +57,18 @@ func (s *MySuite) TestPrintsGateway(c *C) { type TestContext struct{} func (s *MySuite) TestBucketCreation(c *C) { - requestBucketChan := make(chan BucketRequest) - defer close(requestBucketChan) - go SynchronizedBucketService(requestBucketChan, GatewayConfig{StorageDriver: InMemoryStorageDriver}) + config := GatewayConfig{ + StorageDriver: InMemoryStorageDriver, + requestBucketChan: make(chan BucketRequest), + } + defer close(config.requestBucketChan) + go SynchronizedBucketService(config) context := TestContext{} // get new bucket A var bucketA1 Bucket callback := make(chan Bucket) - requestBucketChan <- BucketRequest{ + config.requestBucketChan <- BucketRequest{ name: "bucketA", context: context, callback: callback, @@ -76,7 +79,7 @@ func (s *MySuite) TestBucketCreation(c *C) { // get bucket A again var bucketA2 Bucket callback = make(chan Bucket) - requestBucketChan <- BucketRequest{ + config.requestBucketChan <- BucketRequest{ name: "bucketA", context: context, callback: callback, @@ -88,7 +91,7 @@ func (s *MySuite) TestBucketCreation(c *C) { // get new bucket B var bucketB Bucket callback = make(chan Bucket) - requestBucketChan <- BucketRequest{ + config.requestBucketChan <- BucketRequest{ name: "bucketB", context: context, callback: callback, @@ -99,14 +102,17 @@ func (s *MySuite) TestBucketCreation(c *C) { func (s *MySuite) TestInMemoryBucketOperations(c *C) { // Test in memory bucket operations - requestBucketChan := make(chan BucketRequest) - defer close(requestBucketChan) - go SynchronizedBucketService(requestBucketChan, GatewayConfig{StorageDriver: InMemoryStorageDriver}) + config := GatewayConfig{ + StorageDriver: InMemoryStorageDriver, + requestBucketChan: make(chan BucketRequest), + } + defer close(config.requestBucketChan) + go SynchronizedBucketService(config) context := TestContext{} // get bucket callback := make(chan Bucket) - requestBucketChan <- BucketRequest{ + config.requestBucketChan <- BucketRequest{ name: "bucket", context: context, callback: callback,