From de78a189fd0bc29c2867b3bcf13d7c06fd7ef135 Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Sat, 2 Apr 2016 23:51:42 +0800 Subject: [PATCH] Add check android and ios conf. Signed-off-by: Bo-Yi Wu --- gorush.go | 39 ++++++++---------------------- gorush/config.go | 2 +- gorush/notification.go | 21 +++++++++++++++++ gorush/notification_test.go | 47 +++++++++++++++++++++++++++++++++++++ 4 files changed, 79 insertions(+), 30 deletions(-) diff --git a/gorush.go b/gorush.go index 8eed5fc..ad11d4a 100644 --- a/gorush.go +++ b/gorush.go @@ -36,37 +36,12 @@ func main() { } } - if !gopush.PushConf.Ios.Enabled && !gopush.PushConf.Android.Enabled { - log.Printf("Note: Please enable iOS or Android config in yaml config") - - return + if *certificateKeyPath != "" { + gopush.PushConf.Ios.PemKeyPath = *certificateKeyPath } - if gopush.PushConf.Ios.Enabled { - - if *certificateKeyPath != "" { - gopush.PushConf.Ios.PemKeyPath = *certificateKeyPath - } - - if gopush.PushConf.Ios.PemKeyPath == "" { - log.Println("iOS certificate path not define") - - return - } - } - - // check andorid api key exist - if gopush.PushConf.Android.Enabled { - - if *apiKey != "" { - gopush.PushConf.Android.ApiKey = *apiKey - } - - if gopush.PushConf.Android.ApiKey == "" { - log.Println("Android API Key not define") - - return - } + if *apiKey != "" { + gopush.PushConf.Android.ApiKey = *apiKey } // overwrite server port @@ -74,6 +49,12 @@ func main() { gopush.PushConf.Core.Port = *port } + if err = gopush.CheckPushConf(); err != nil { + log.Printf("Check Conf Error: '%v'", err) + + return + } + gopush.InitAPNSClient() gopush.RunHTTPServer() } diff --git a/gorush/config.go b/gorush/config.go index 9ea2fee..26d0a45 100644 --- a/gorush/config.go +++ b/gorush/config.go @@ -55,8 +55,8 @@ func BuildDefaultPushConf() ConfYaml { conf.Api.StatGoUri = "/api/status" // Android - conf.Android.ApiKey = "" conf.Android.Enabled = false + conf.Android.ApiKey = "" // iOS conf.Ios.Enabled = false diff --git a/gorush/notification.go b/gorush/notification.go index ff0ac79..2920545 100644 --- a/gorush/notification.go +++ b/gorush/notification.go @@ -6,6 +6,7 @@ import ( "github.com/sideshow/apns2/certificate" "github.com/sideshow/apns2/payload" "log" + "errors" ) type ExtendJSON struct { @@ -71,6 +72,26 @@ type RequestPushNotification struct { IDs []uint64 `json:"seq_id,omitempty"` } +func CheckPushConf() error { + if !PushConf.Ios.Enabled && !PushConf.Android.Enabled { + return errors.New("Please enable iOS or Android config in yaml config") + } + + if PushConf.Ios.Enabled { + if PushConf.Ios.PemKeyPath == "" { + return errors.New("Missing iOS certificate path") + } + } + + if PushConf.Android.Enabled { + if PushConf.Android.ApiKey == "" { + return errors.New("Missing Android API Key") + } + } + + return nil +} + func InitAPNSClient() error { if PushConf.Ios.Enabled { var err error diff --git a/gorush/notification_test.go b/gorush/notification_test.go index 96166b3..f2f854f 100644 --- a/gorush/notification_test.go +++ b/gorush/notification_test.go @@ -9,6 +9,53 @@ import ( "testing" ) +func TestDisabledAndroidIosConf(t *testing.T) { + PushConf = BuildDefaultPushConf() + + err := CheckPushConf() + + assert.Error(t, err) + assert.Equal(t, "Please enable iOS or Android config in yaml config", err.Error()) +} + +func TestMissingIOSCertificate(t *testing.T) { + PushConf = BuildDefaultPushConf() + + PushConf.Ios.Enabled = true + PushConf.Ios.PemKeyPath = "" + + err := CheckPushConf() + + assert.Error(t, err) + assert.Equal(t, "Missing iOS certificate path", err.Error()) +} + +func TestMissingAndroidAPIKey(t *testing.T) { + PushConf = BuildDefaultPushConf() + + PushConf.Android.Enabled = true + PushConf.Android.ApiKey = "" + + err := CheckPushConf() + + assert.Error(t, err) + assert.Equal(t, "Missing Android API Key", err.Error()) +} + +func TestCorrectConf(t *testing.T) { + PushConf = BuildDefaultPushConf() + + PushConf.Android.Enabled = true + PushConf.Android.ApiKey = "xxxxx" + + PushConf.Ios.Enabled = true + PushConf.Ios.PemKeyPath = "xxxxx" + + err := CheckPushConf() + + assert.NoError(t, err) +} + func TestIOSNotificationStructure(t *testing.T) { var dat map[string]interface{}