diff --git a/conf/app.conf b/conf/app.conf
index 955df9ef1..153370877 100644
--- a/conf/app.conf
+++ b/conf/app.conf
@@ -4,3 +4,5 @@ runmode = dev
autorender = false
copyrequestbody = true
enableadmin = true
+
+apiversion = 1.0.0
\ No newline at end of file
diff --git a/controllers/ping.go b/controllers/ping.go
index 69b8c2ac4..28ae973dc 100644
--- a/controllers/ping.go
+++ b/controllers/ping.go
@@ -1,14 +1,23 @@
package controllers
-import "github.com/astaxie/beego"
+import (
+ "github.com/astaxie/beego"
+ "encoding/xml"
+)
-type PingController struct {
- beego.Controller
+type PingResponse struct {
+ XMLName xml.Name `xml:"http://subsonic.org/restapi subsonic-response"`
+ Status string `xml:"status,attr"`
+ Version string `xml:"version,attr"`
}
+type PingController struct{ beego.Controller }
+
// @router /rest/ping.view [get]
func (this *PingController) Get() {
- this.Ctx.WriteString("")
+ response := &PingResponse{Status:"ok", Version: beego.AppConfig.String("apiversion")}
+ xmlBody, _ := xml.Marshal(response)
+ this.Ctx.Output.Body([]byte(xml.Header + string(xmlBody)))
}
diff --git a/tests/controllers/ping_test.go b/tests/controllers/ping_test.go
index b04b16fc2..8f82144e2 100644
--- a/tests/controllers/ping_test.go
+++ b/tests/controllers/ping_test.go
@@ -10,6 +10,8 @@ import (
"github.com/astaxie/beego"
. "github.com/smartystreets/goconvey/convey"
+ "github.com/deluan/gosonic/controllers"
+"encoding/xml"
)
func init() {
@@ -33,8 +35,11 @@ func TestPing(t *testing.T) {
Convey("The Result Should Not Be Empty", func() {
So(w.Body.Len(), ShouldBeGreaterThan, 0)
})
- Convey("The Result Should Be A Pong", func() {
- So(w.Body.String(), ShouldEqual, "")
+ Convey("The Result Should Be A Valid Ping Response", func() {
+ v := controllers.PingResponse{}
+ xml.Unmarshal(w.Body.Bytes(), &v)
+ So(v.Status, ShouldEqual, "ok")
+ So(v.Version, ShouldEqual, "1.0.0")
})
})