X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=test%2Fusecases%2Foruclosedlooprecovery%2Fgoversion%2Fmain.go;h=c3d731f4c4015a1dd7378b7c1c459f07a31d54a3;hb=6b43426c2b52daa5ace5205b98d09e1871fa41d6;hp=ebd4dce1de809d072ec837a7ae72018ab314d987;hpb=c658d388f93467cb1a1229d11a0e01616cd97e3c;p=nonrtric.git diff --git a/test/usecases/oruclosedlooprecovery/goversion/main.go b/test/usecases/oruclosedlooprecovery/goversion/main.go index ebd4dce1..c3d731f4 100644 --- a/test/usecases/oruclosedlooprecovery/goversion/main.go +++ b/test/usecases/oruclosedlooprecovery/goversion/main.go @@ -21,13 +21,13 @@ package main import ( + "crypto/tls" "encoding/json" "fmt" "net/http" "os" "os/signal" "syscall" - "time" "github.com/gorilla/mux" log "github.com/sirupsen/logrus" @@ -37,21 +37,16 @@ import ( "oransc.org/usecase/oruclosedloop/internal/restclient" ) -type Server interface { - ListenAndServe() error -} - -const timeoutHTTPClient = time.Second * 5 const jobId = "14e7bb84-a44d-44c1-90b7-6995a92ad43c" var jobRegistrationInfo = struct { - InfoTypeId string `json:"info_type_id"` - JobResultUri string `json:"job_result_uri"` + InfoTypeID string `json:"info_type_id"` + JobResultURI string `json:"job_result_uri"` JobOwner string `json:"job_owner"` JobDefinition interface{} `json:"job_definition"` }{ - InfoTypeId: "STD_Fault_Messages", - JobResultUri: "", + InfoTypeID: "STD_Fault_Messages", + JobResultURI: "", JobOwner: "O-RU Closed Loop Usecase", JobDefinition: "{}", } @@ -61,6 +56,7 @@ var configuration *config.Config var linkfailureConfig linkfailure.Configuration var lookupService repository.LookupService var consumerPort string +var started bool func init() { doInit() @@ -70,16 +66,13 @@ func doInit() { configuration = config.New() log.SetLevel(configuration.LogLevel) - - client = &http.Client{ - Timeout: timeoutHTTPClient, - } + log.Debug("Using configuration: ", configuration) consumerPort = fmt.Sprint(configuration.ConsumerPort) - jobRegistrationInfo.JobResultUri = configuration.ConsumerHost + ":" + consumerPort + jobRegistrationInfo.JobResultURI = configuration.ConsumerHost + ":" + consumerPort linkfailureConfig = linkfailure.Configuration{ - SDNRAddress: configuration.SDNRHost + ":" + fmt.Sprint(configuration.SDNRPort), + SDNRAddress: configuration.SDNRAddress, SDNRUser: configuration.SDNRUser, SDNRPassword: configuration.SDNPassword, } @@ -95,11 +88,16 @@ func main() { log.Fatalf("Unable to create LookupService due to inability to get O-RU-ID to O-DU-ID map. Cause: %v", initErr) } + var cert tls.Certificate + if c, err := restclient.CreateClientCertificate(configuration.ConsumerCertPath, configuration.ConsumerKeyPath); err == nil { + cert = c + } else { + log.Fatalf("Stopping producer due to error: %v", err) + } + client = restclient.CreateRetryClient(cert) + go func() { - startServer(&http.Server{ - Addr: ":" + consumerPort, - Handler: getRouter(), - }) + startServer() os.Exit(1) // If the startServer function exits, it is because there has been a failure in the server, so we exit. }() @@ -115,6 +113,11 @@ func validateConfiguration(configuration *config.Config) error { if configuration.ConsumerHost == "" || configuration.ConsumerPort == 0 { return fmt.Errorf("consumer host and port must be provided") } + + if configuration.ConsumerCertPath == "" || configuration.ConsumerKeyPath == "" { + return fmt.Errorf("missing CONSUMER_CERT and/or CONSUMER_KEY") + } + return nil } @@ -128,17 +131,24 @@ func getRouter() *mux.Router { r := mux.NewRouter() r.HandleFunc("/", messageHandler.MessagesHandler).Methods(http.MethodPost).Name("messageHandler") + r.HandleFunc("/status", statusHandler).Methods(http.MethodGet).Name("status") r.HandleFunc("/admin/start", startHandler).Methods(http.MethodPost).Name("start") r.HandleFunc("/admin/stop", stopHandler).Methods(http.MethodPost).Name("stop") return r } -func startServer(server Server) { - if err := server.ListenAndServe(); err != nil { +func startServer() { + var err error + if restclient.IsUrlSecure(configuration.ConsumerHost) { + err = http.ListenAndServeTLS(fmt.Sprintf(":%v", configuration.ConsumerPort), configuration.ConsumerCertPath, configuration.ConsumerKeyPath, getRouter()) + } else { + err = http.ListenAndServe(fmt.Sprintf(":%v", configuration.ConsumerPort), getRouter()) + } + if err != nil { log.Errorf("Server stopped unintentionally due to: %v. Deleteing job.", err) if deleteErr := deleteJob(); deleteErr != nil { - log.Error(fmt.Sprintf("Unable to delete consumer job due to: %v. Please remove job %v manually.", deleteErr, jobId)) + log.Errorf("Unable to delete consumer job due to: %v. Please remove job %v manually.", deleteErr, jobId) } } } @@ -156,6 +166,7 @@ func startHandler(w http.ResponseWriter, r *http.Request) { return } log.Debug("Registered job.") + started = true } func stopHandler(w http.ResponseWriter, r *http.Request) { @@ -165,6 +176,15 @@ func stopHandler(w http.ResponseWriter, r *http.Request) { return } log.Debug("Deleted job.") + started = false +} + +func statusHandler(w http.ResponseWriter, r *http.Request) { + runStatus := "started" + if !started { + runStatus = "stopped" + } + fmt.Fprintf(w, `{"status": "%v"}`, runStatus) } func deleteOnShutdown(s chan os.Signal) { @@ -173,7 +193,7 @@ func deleteOnShutdown(s chan os.Signal) { <-s log.Info("Shutting down gracefully.") if err := deleteJob(); err != nil { - log.Error(fmt.Sprintf("Unable to delete job on shutdown due to: %v. Please remove job %v manually.", err, jobId)) + log.Errorf("Unable to delete job on shutdown due to: %v. Please remove job %v manually.", err, jobId) } }