Populating http handler with test scaffolding

This commit is contained in:
Frederick F. Kautz IV 2015-01-18 16:10:48 -08:00
parent 8d20e81295
commit c766f3617b
2 changed files with 29 additions and 8 deletions

View File

@ -1,23 +1,25 @@
package server package server
import ( import (
"io"
"log" "log"
"net/http" "net/http"
"reflect" "reflect"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/minio-io/minio/pkg/httpserver" "github.com/minio-io/minio/pkg/httpserver"
"github.com/minio-io/minio/pkg/storage" storageModule "github.com/minio-io/minio/pkg/storage"
) )
var storage *storageModule.Storage
func Start() { func Start() {
ctrlChans := make([]chan<- string, 0) ctrlChans := make([]chan<- string, 0)
statusChans := make([]<-chan error, 0) statusChans := make([]<-chan error, 0)
ctrlChan, statusChan := storage.Start() ctrlChan, statusChan, storageSystem := storageModule.Start()
ctrlChans = append(ctrlChans, ctrlChan) ctrlChans = append(ctrlChans, ctrlChan)
statusChans = append(statusChans, statusChan) statusChans = append(statusChans, statusChan)
storage = storageSystem
ctrlChan, statusChan = httpserver.Start(getHttpHandler()) ctrlChan, statusChan = httpserver.Start(getHttpHandler())
ctrlChans = append(ctrlChans, ctrlChan) ctrlChans = append(ctrlChans, ctrlChan)
@ -58,10 +60,13 @@ func createSelectCases(channels []<-chan error) []reflect.SelectCase {
func getHttpHandler() http.Handler { func getHttpHandler() http.Handler {
mux := mux.NewRouter() mux := mux.NewRouter()
mux.HandleFunc("/", storageHandler) mux.HandleFunc("/{bucket}/{object:.*}", storageHandler)
return mux return mux
} }
func storageHandler(w http.ResponseWriter, req *http.Request) { func storageHandler(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, "MINIO") vars := mux.Vars(req)
bucket := vars["bucket"]
object := vars["object"]
storage.CopyObjectToWriter(w, bucket, object)
} }

View File

@ -1,12 +1,28 @@
package storage package storage
import "errors" import (
"bytes"
"errors"
"io"
)
func Start() (chan<- string, <-chan error) { type Storage struct{}
func (storage *Storage) CopyObjectToWriter(w io.Writer, bucket string, object string) error {
// TODO synchronize access
// get object
objectData := "OBJECT: " + bucket + " - " + object
objectBuffer := bytes.NewBufferString(objectData)
// copy object to writer
_, err := io.Copy(w, objectBuffer)
return err
}
func Start() (chan<- string, <-chan error, *Storage) {
ctrlChannel := make(chan string) ctrlChannel := make(chan string)
errorChannel := make(chan error) errorChannel := make(chan error)
go start(ctrlChannel, errorChannel) go start(ctrlChannel, errorChannel)
return ctrlChannel, errorChannel return ctrlChannel, errorChannel, &Storage{}
} }
func start(ctrlChannel <-chan string, errorChannel chan<- error) { func start(ctrlChannel <-chan string, errorChannel chan<- error) {