Add delete command to fileStore
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user