132 lines
4.8 KiB
Go
132 lines
4.8 KiB
Go
package gobot
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/gomega"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
)
|
|
|
|
var _ = Describe("Master", func() {
|
|
var (
|
|
myMaster *Master
|
|
a *api
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
myMaster = GobotMaster()
|
|
startApi = func(m *api) {}
|
|
a = Api(myMaster)
|
|
myMaster.Robots = []*Robot{
|
|
newTestRobot("Robot 1"),
|
|
newTestRobot("Robot 2"),
|
|
newTestRobot("Robot 3"),
|
|
}
|
|
trap = func(c chan os.Signal) {
|
|
c <- os.Interrupt
|
|
}
|
|
myMaster.Start()
|
|
})
|
|
|
|
Context("when valid", func() {
|
|
It("should return all robots", func() {
|
|
request, _ := http.NewRequest("GET", "/robots", nil)
|
|
response := httptest.NewRecorder()
|
|
a.robots(response, request)
|
|
body, _ := ioutil.ReadAll(response.Body)
|
|
var i []map[string]interface{}
|
|
json.Unmarshal(body, &i)
|
|
Expect(len(i)).To(Equal(3))
|
|
})
|
|
It("should return robot", func() {
|
|
request, _ := http.NewRequest("GET", "/robots/Robot%201", nil)
|
|
response := httptest.NewRecorder()
|
|
a.robot("Robot 1", response, request)
|
|
body, _ := ioutil.ReadAll(response.Body)
|
|
var i map[string]interface{}
|
|
json.Unmarshal(body, &i)
|
|
Expect(i["name"].(string)).To(Equal("Robot 1"))
|
|
})
|
|
It("should return all robot devices", func() {
|
|
request, _ := http.NewRequest("GET", "/robots/Robot%201/devices", nil)
|
|
response := httptest.NewRecorder()
|
|
a.robot_devices("Robot 1", response, request)
|
|
body, _ := ioutil.ReadAll(response.Body)
|
|
var i []map[string]interface{}
|
|
json.Unmarshal(body, &i)
|
|
Expect(len(i)).To(Equal(3))
|
|
})
|
|
It("should return robot commands", func() {
|
|
request, _ := http.NewRequest("GET", "/robots/Robot%201/commands", nil)
|
|
response := httptest.NewRecorder()
|
|
a.robot_commands("Robot 1", response, request)
|
|
body, _ := ioutil.ReadAll(response.Body)
|
|
var i []string
|
|
json.Unmarshal(body, &i)
|
|
Expect(i).To(Equal([]string{"robotTestFunction"}))
|
|
})
|
|
It("should execute robot command", func() {
|
|
request, _ := http.NewRequest("GET", "/robots/Robot%201/commands/robotTestFuntion", bytes.NewBufferString(`{"message":"Beep Boop"}`))
|
|
request.Header.Add("Content-Type", "application/json")
|
|
response := httptest.NewRecorder()
|
|
a.executeRobotCommand("Robot 1", "robotTestFunction", response, request)
|
|
body, _ := ioutil.ReadAll(response.Body)
|
|
var i map[string]interface{}
|
|
json.Unmarshal(body, &i)
|
|
Expect(i["result"]).To(Equal("hey Robot 1, Beep Boop"))
|
|
})
|
|
It("should not execute unknown robot command", func() {
|
|
request, _ := http.NewRequest("GET", "/robots/Robot%201/commands/robotTestFuntion1", bytes.NewBufferString(`{"message":"Beep Boop"}`))
|
|
request.Header.Add("Content-Type", "application/json")
|
|
response := httptest.NewRecorder()
|
|
a.executeRobotCommand("Robot 1", "robotTestFunction1", response, request)
|
|
body, _ := ioutil.ReadAll(response.Body)
|
|
var i map[string]interface{}
|
|
json.Unmarshal(body, &i)
|
|
Expect(i["result"]).To(Equal("Unknown Command"))
|
|
})
|
|
It("should return robot device", func() {
|
|
request, _ := http.NewRequest("GET", "/robots/Robot%201/devices/Device%201", nil)
|
|
response := httptest.NewRecorder()
|
|
a.robot_device("Robot 1", "Device 1", response, request)
|
|
body, _ := ioutil.ReadAll(response.Body)
|
|
var i map[string]interface{}
|
|
json.Unmarshal(body, &i)
|
|
Expect(i["name"].(string)).To(Equal("Device 1"))
|
|
})
|
|
It("should return device commands", func() {
|
|
request, _ := http.NewRequest("GET", "/robots/Robot%201/devices/Device%201/commands", nil)
|
|
response := httptest.NewRecorder()
|
|
a.robot_device_commands("Robot 1", "Device 1", response, request)
|
|
body, _ := ioutil.ReadAll(response.Body)
|
|
var i []string
|
|
json.Unmarshal(body, &i)
|
|
Expect(i).To(Equal([]string{"TestDriverCommand", "DriverCommand"}))
|
|
})
|
|
It("should execute device command", func() {
|
|
request, _ := http.NewRequest("GET", "/robots/Robot%201/devices/Device%201/commands/TestDriverCommand", bytes.NewBufferString(`{"name":"human"}`))
|
|
request.Header.Add("Content-Type", "application/json")
|
|
response := httptest.NewRecorder()
|
|
a.executeCommand("Robot 1", "Device 1", "TestDriverCommand", response, request)
|
|
body, _ := ioutil.ReadAll(response.Body)
|
|
var i map[string]interface{}
|
|
json.Unmarshal(body, &i)
|
|
Expect(i["result"]).To(Equal("hello human"))
|
|
})
|
|
It("should not execute unknown device command", func() {
|
|
request, _ := http.NewRequest("GET", "/robots/Robot%201/devices/Device%201/commands/DriverCommand1", bytes.NewBufferString(`{"name":"human"}`))
|
|
request.Header.Add("Content-Type", "application/json")
|
|
response := httptest.NewRecorder()
|
|
a.executeCommand("Robot 1", "Device 1", "DriverCommand4", response, request)
|
|
body, _ := ioutil.ReadAll(response.Body)
|
|
var i map[string]interface{}
|
|
json.Unmarshal(body, &i)
|
|
Expect(i["result"]).To(Equal("Unknown Command"))
|
|
})
|
|
})
|
|
})
|