Application test

master v0.1.0
Caj Larsson 3 years ago
parent c72df43568
commit a70e8ef74b

@ -9,8 +9,13 @@ import (
"caj-larsson/bog/integration" "caj-larsson/bog/integration"
) )
type Router interface {
HandleFunc(pattern string, handler func(http.ResponseWriter, *http.Request))
ServeHTTP(http.ResponseWriter, *http.Request)
}
type Bog struct { type Bog struct {
mux *http.ServeMux router Router
file_service domain.BogFileService file_service domain.BogFileService
address string address string
} }
@ -28,52 +33,53 @@ func buildUserAgentRepository(config DatabaseConfig) *integration.SQLiteUserAgen
return integration.NewSQLiteUserAgentRepository(config.Connection) return integration.NewSQLiteUserAgentRepository(config.Connection)
} }
func buildHttpMux(file_service domain.BogFileService) *http.ServeMux { func (b *Bog) fileHandler(w http.ResponseWriter, r *http.Request) {
mux := http.NewServeMux() if r.URL.Path == "/" {
mux.HandleFunc("/",func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hi")
if r.URL.Path == "/" { return
fmt.Fprintf(w, "Hi") }
return
}
ref := domain.FileReference {r.URL.Path, r.Header["User-Agent"][0]} ref := domain.FileReference {r.URL.Path, r.Header["User-Agent"][0]}
switch r.Method { switch r.Method {
case "GET": case "GET":
bog_file, err := file_service.OpenOutFile(ref) bog_file, err := b.file_service.OpenOutFile(ref)
if err == domain.ErrNotExists { if err == domain.ErrNotExists {
http.NotFound(w, r) http.NotFound(w, r)
return return
} }
if err != nil { if err != nil {
panic(err) panic(err)
} }
http.ServeContent(w, r, bog_file.Path(), bog_file.Modified(), bog_file) http.ServeContent(w, r, bog_file.Path(), bog_file.Modified(), bog_file)
case "POST": case "POST":
fallthrough fallthrough
case "PUT": case "PUT":
size_str := r.Header["Content-Length"][0] size_str := r.Header["Content-Length"][0]
size, err := strconv.ParseInt(size_str, 10, 64) size, err := strconv.ParseInt(size_str, 10, 64)
if err != nil { if err != nil {
w.WriteHeader(422) w.WriteHeader(422)
return return
} }
err = file_service.SaveFile(ref, r.Body, size) err = b.file_service.SaveFile(ref, r.Body, size)
if err != nil { if err != nil {
panic(err) panic(err)
}
} }
return }
}) return
return mux
} }
func (b *Bog) routes() {
b.router.HandleFunc("/", b.fileHandler)
}
func New(config *Configuration) *Bog { func New(config *Configuration) *Bog {
b := new(Bog) b := new(Bog)
b.address = config.bindAddress() b.address = config.bindAddress()
@ -81,13 +87,15 @@ func New(config *Configuration) *Bog {
fsBogRepo := buildFileDataRepository(config.File) fsBogRepo := buildFileDataRepository(config.File)
uaRepo := buildUserAgentRepository(config.Database) uaRepo := buildUserAgentRepository(config.Database)
file_service := domain.NewBogFileService( b.file_service = domain.NewBogFileService(
uaRepo, fsBogRepo, config.Quota.ParsedSizeBytes(), config.Quota.ParsedDuration(), uaRepo, fsBogRepo, config.Quota.ParsedSizeBytes(), config.Quota.ParsedDuration(),
) )
b.mux = buildHttpMux(file_service)
b.router = new(http.ServeMux)
b.routes()
return b return b
} }
func (b *Bog) Run() { func (b *Bog) Run() {
http.ListenAndServe(b.address, b.mux) http.ListenAndServe(b.address, b.router)
} }

@ -0,0 +1,39 @@
package application
import (
"fmt"
"net/http/httptest"
"net/http"
"testing"
"strings"
"time"
"caj-larsson/bog/domain"
"caj-larsson/bog/test/mock"
)
func TestApplication(t *testing.T) {
file_service := domain.NewBogFileService(
mock.NewMockUserAgentRepository(),
mock.NewMockFileRepository(),
1000,
time.Hour,
)
bog := Bog {
router: new(http.ServeMux),
file_service: file_service,
address: "fake",
}
bog.routes()
req := httptest.NewRequest("POST", "/apath", strings.NewReader("testdata"))
req.Header.Add("User-Agent", "testingclient")
w := httptest.NewRecorder()
bog.router.ServeHTTP(w, req)
if (w.Code != 200){
fmt.Printf("%v", w)
t.Error("not ok")
}
}
Loading…
Cancel
Save