Moving bucket request channel to private config option

master
Frederick F. Kautz IV 10 years ago
parent 00b5a5d380
commit 4e6214514f
  1. 21
      gateway.go
  2. 26
      gateway_test.go

@ -11,6 +11,7 @@ import (
// Stores system configuration, populated from CLI or test runner // Stores system configuration, populated from CLI or test runner
type GatewayConfig struct { type GatewayConfig struct {
StorageDriver StorageDriver StorageDriver StorageDriver
requestBucketChan chan BucketRequest
} }
// Message for requesting a bucket // Message for requesting a bucket
@ -37,7 +38,7 @@ type StorageDriver func(bucket string, input chan ObjectRequest)
type fakeContext struct{} type fakeContext struct{}
type GatewayGetHandler struct { type GatewayGetHandler struct {
requestBucketChan chan BucketRequest config GatewayConfig
} }
// GET requests server // GET requests server
@ -47,7 +48,7 @@ func (handler GatewayGetHandler) ServeHTTP(w http.ResponseWriter, req *http.Requ
path := vars["path"] path := vars["path"]
context := fakeContext{} context := fakeContext{}
callback := make(chan Bucket) callback := make(chan Bucket)
handler.requestBucketChan <- BucketRequest{ handler.config.requestBucketChan <- BucketRequest{
name: bucketName, name: bucketName,
context: context, context: context,
callback: callback, callback: callback,
@ -64,7 +65,7 @@ func (handler GatewayGetHandler) ServeHTTP(w http.ResponseWriter, req *http.Requ
} }
type GatewayPutHandler struct { type GatewayPutHandler struct {
requestBucketChan chan BucketRequest config GatewayConfig
} }
func (handler GatewayPutHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { 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) object, _ := ioutil.ReadAll(req.Body)
context := fakeContext{} context := fakeContext{}
callback := make(chan Bucket) callback := make(chan Bucket)
handler.requestBucketChan <- BucketRequest{ handler.config.requestBucketChan <- BucketRequest{
name: bucketName, name: bucketName,
context: context, context: context,
callback: callback, callback: callback,
@ -84,17 +85,17 @@ func (handler GatewayPutHandler) ServeHTTP(w http.ResponseWriter, req *http.Requ
} }
func RegisterGatewayHandlers(router *mux.Router, config GatewayConfig) { func RegisterGatewayHandlers(router *mux.Router, config GatewayConfig) {
requestBucketChan := make(chan BucketRequest) config.requestBucketChan = make(chan BucketRequest)
go SynchronizedBucketService(requestBucketChan, config) go SynchronizedBucketService(config)
getHandler := GatewayGetHandler{requestBucketChan: requestBucketChan} getHandler := GatewayGetHandler{config}
putHandler := GatewayPutHandler{requestBucketChan: requestBucketChan} putHandler := GatewayPutHandler{config}
router.Handle("/{bucket}/{path:.*}", getHandler).Methods("GET") router.Handle("/{bucket}/{path:.*}", getHandler).Methods("GET")
router.Handle("/{bucket}/{path:.*}", putHandler).Methods("PUT") router.Handle("/{bucket}/{path:.*}", putHandler).Methods("PUT")
} }
func SynchronizedBucketService(input chan BucketRequest, config GatewayConfig) { func SynchronizedBucketService(config GatewayConfig) {
buckets := make(map[string]*SynchronizedBucket) buckets := make(map[string]*SynchronizedBucket)
for request := range input { for request := range config.requestBucketChan {
if buckets[request.name] == nil { if buckets[request.name] == nil {
bucketChannel := make(chan ObjectRequest) bucketChannel := make(chan ObjectRequest)
go config.StorageDriver(request.name, bucketChannel) go config.StorageDriver(request.name, bucketChannel)

@ -57,15 +57,18 @@ func (s *MySuite) TestPrintsGateway(c *C) {
type TestContext struct{} type TestContext struct{}
func (s *MySuite) TestBucketCreation(c *C) { func (s *MySuite) TestBucketCreation(c *C) {
requestBucketChan := make(chan BucketRequest) config := GatewayConfig{
defer close(requestBucketChan) StorageDriver: InMemoryStorageDriver,
go SynchronizedBucketService(requestBucketChan, GatewayConfig{StorageDriver: InMemoryStorageDriver}) requestBucketChan: make(chan BucketRequest),
}
defer close(config.requestBucketChan)
go SynchronizedBucketService(config)
context := TestContext{} context := TestContext{}
// get new bucket A // get new bucket A
var bucketA1 Bucket var bucketA1 Bucket
callback := make(chan Bucket) callback := make(chan Bucket)
requestBucketChan <- BucketRequest{ config.requestBucketChan <- BucketRequest{
name: "bucketA", name: "bucketA",
context: context, context: context,
callback: callback, callback: callback,
@ -76,7 +79,7 @@ func (s *MySuite) TestBucketCreation(c *C) {
// get bucket A again // get bucket A again
var bucketA2 Bucket var bucketA2 Bucket
callback = make(chan Bucket) callback = make(chan Bucket)
requestBucketChan <- BucketRequest{ config.requestBucketChan <- BucketRequest{
name: "bucketA", name: "bucketA",
context: context, context: context,
callback: callback, callback: callback,
@ -88,7 +91,7 @@ func (s *MySuite) TestBucketCreation(c *C) {
// get new bucket B // get new bucket B
var bucketB Bucket var bucketB Bucket
callback = make(chan Bucket) callback = make(chan Bucket)
requestBucketChan <- BucketRequest{ config.requestBucketChan <- BucketRequest{
name: "bucketB", name: "bucketB",
context: context, context: context,
callback: callback, callback: callback,
@ -99,14 +102,17 @@ func (s *MySuite) TestBucketCreation(c *C) {
func (s *MySuite) TestInMemoryBucketOperations(c *C) { func (s *MySuite) TestInMemoryBucketOperations(c *C) {
// Test in memory bucket operations // Test in memory bucket operations
requestBucketChan := make(chan BucketRequest) config := GatewayConfig{
defer close(requestBucketChan) StorageDriver: InMemoryStorageDriver,
go SynchronizedBucketService(requestBucketChan, GatewayConfig{StorageDriver: InMemoryStorageDriver}) requestBucketChan: make(chan BucketRequest),
}
defer close(config.requestBucketChan)
go SynchronizedBucketService(config)
context := TestContext{} context := TestContext{}
// get bucket // get bucket
callback := make(chan Bucket) callback := make(chan Bucket)
requestBucketChan <- BucketRequest{ config.requestBucketChan <- BucketRequest{
name: "bucket", name: "bucket",
context: context, context: context,
callback: callback, callback: callback,

Loading…
Cancel
Save