VOL-2086 unit tests for arouter.go;
Set exit status on errors

Change-Id: Ic395f454ed7e1d7ebc9b429b3c44cb0a2e785311
diff --git a/cmd/arouter/arouter.go b/cmd/arouter/arouter.go
index cfd0282..9415362 100644
--- a/cmd/arouter/arouter.go
+++ b/cmd/arouter/arouter.go
@@ -27,17 +27,19 @@
 	"os"
 )
 
-func main() {
+// startup arouter, return exit status as an integer
+func startup() int {
 
 	conf, err := afrouter.ParseCmd()
 	if err != nil {
 		fmt.Printf("Error: %v\n", err)
-		return
+		return 1
 	}
 
 	// Setup logging
 	if _, err := log.SetDefaultLogger(log.JSON, *conf.LogLevel, log.Fields{"instanceId": conf.InstanceID}); err != nil {
 		log.With(log.Fields{"error": err}).Fatal("Cannot setup logging")
+		return 1
 	}
 
 	defer func() {
@@ -52,14 +54,14 @@
 	if *conf.DisplayVersionOnly {
 		fmt.Println("VOLTHA API Server (afrouter)")
 		fmt.Println(version.VersionInfo.String("  "))
-		return
+		return 0
 	}
 
 	// Parse the config file
 	err = conf.LoadConfig()
 	if err != nil {
 		log.Error(err)
-		return
+		return 1
 	}
 	log.With(log.Fields{"config": *conf}).Debug("Configuration loaded")
 
@@ -72,18 +74,29 @@
 	err = afrouter.InitExitHandler()
 	if err != nil {
 		log.Errorf("Failed to initialize exit handler, exiting: %v", err)
-		return
+		return 1
 	}
 
 	// Create the affinity router proxy...
 	if ap, err := afrouter.NewArouterProxy(conf); err != nil {
 		log.Errorf("Failed to create the arouter proxy, exiting:%v", err)
-		return
+		return 1
 		// and start it.
 		// This function never returns unless an error
 		// occurs or a signal is caught.
+	} else if *conf.DryRun {
+		// Do nothing
 	} else if err := ap.ListenAndServe(); err != nil {
 		log.Errorf("Exiting on error %v", err)
+		return 1
 	}
 
+	return 0
+}
+
+func main() {
+	status := startup()
+	if status != 0 {
+		os.Exit(status)
+	}
 }