Add delete command to fileStore

This commit is contained in:
Soam Vasani
2016-09-10 01:01:27 -07:00
parent 6ea465c67c
commit 60de12dfce
2 changed files with 24 additions and 4 deletions
+19 -4
View File
@@ -19,6 +19,7 @@ package controller
import ( import (
"io/ioutil" "io/ioutil"
"log" "log"
"os"
"path" "path"
) )
@@ -27,6 +28,7 @@ type requestType int
const ( const (
READ requestType = iota READ requestType = iota
WRITE WRITE
DELETE
) )
type ( type (
@@ -67,6 +69,8 @@ func (fs *fileStore) fileStoreService() {
response.fileContents, response.error = ioutil.ReadFile(path.Join(fs.root, req.fileName)) response.fileContents, response.error = ioutil.ReadFile(path.Join(fs.root, req.fileName))
case WRITE: case WRITE:
response.error = ioutil.WriteFile(path.Join(fs.root, req.fileName), req.fileContents, 0600) response.error = ioutil.WriteFile(path.Join(fs.root, req.fileName), req.fileContents, 0600)
case DELETE:
response.error = os.Remove(path.Join(fs.root, req.fileName))
default: default:
log.Panic("bad request") log.Panic("bad request")
} }
@@ -75,24 +79,35 @@ func (fs *fileStore) fileStoreService() {
} }
func (fs *fileStore) read(fileName string) ([]byte, error) { func (fs *fileStore) read(fileName string) ([]byte, error) {
req := &fileStoreRequest{ req := fileStoreRequest{
requestType: READ, requestType: READ,
fileName: fileName, fileName: fileName,
responseChannel: make(chan fileStoreResponse), responseChannel: make(chan fileStoreResponse),
} }
fs.requestChannel <- *req fs.requestChannel <- req
response := <-req.responseChannel response := <-req.responseChannel
return response.fileContents, response.error return response.fileContents, response.error
} }
func (fs *fileStore) write(fileName string, contents []byte) error { func (fs *fileStore) write(fileName string, contents []byte) error {
req := &fileStoreRequest{ req := fileStoreRequest{
requestType: WRITE, requestType: WRITE,
fileName: fileName, fileName: fileName,
fileContents: contents, fileContents: contents,
responseChannel: make(chan fileStoreResponse), responseChannel: make(chan fileStoreResponse),
} }
fs.requestChannel <- *req fs.requestChannel <- req
response := <-req.responseChannel
return response.error
}
func (fs *fileStore) delete(fileName string) error {
req := fileStoreRequest{
requestType: DELETE,
fileName: fileName,
responseChannel: make(chan fileStoreResponse),
}
fs.requestChannel <- req
response := <-req.responseChannel response := <-req.responseChannel
return response.error return response.error
} }
+5
View File
@@ -55,4 +55,9 @@ func TestFileStore(t *testing.T) {
if string(observedContents) != string(contents) { if string(observedContents) != string(contents) {
t.Fatalf("contents don't match") t.Fatalf("contents don't match")
} }
err = fs.delete(path)
if err != nil {
t.Fatalf("error: %v", err)
}
} }