Adding system test coverage support
[aaf/sms.git] / sms-service / src / sms / sms.go
1 /*
2  * Copyright 2018 Intel Corporation, Inc
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package main
18
19 import (
20         "context"
21         "log"
22         "net/http"
23         "os"
24         "os/signal"
25
26         smsauth "sms/auth"
27         smsbackend "sms/backend"
28         smsconfig "sms/config"
29         smshandler "sms/handler"
30         smslogger "sms/log"
31 )
32
33 func main() {
34         // Initialize logger
35         smslogger.Init("sms.log")
36
37         // Read Configuration File
38         smsConf, err := smsconfig.ReadConfigFile("smsconfig.json")
39         if err != nil {
40                 log.Fatal(err)
41         }
42
43         backendImpl, err := smsbackend.InitSecretBackend()
44         if err != nil {
45                 log.Fatal(err)
46         }
47
48         httpRouter := smshandler.CreateRouter(backendImpl)
49
50         // TODO: Use CA certificate from AAF
51         tlsConfig, err := smsauth.GetTLSConfig(smsConf.CAFile)
52         if err != nil {
53                 log.Fatal(err)
54         }
55
56         httpServer := &http.Server{
57                 Handler:   httpRouter,
58                 Addr:      ":10443",
59                 TLSConfig: tlsConfig,
60         }
61
62         // Listener for SIGINT so that it returns cleanly
63         connectionsClose := make(chan struct{})
64         go func() {
65                 c := make(chan os.Signal, 1)
66                 signal.Notify(c, os.Interrupt)
67                 <-c
68                 httpServer.Shutdown(context.Background())
69                 close(connectionsClose)
70         }()
71
72         err = httpServer.ListenAndServeTLS(smsConf.ServerCert, smsConf.ServerKey)
73         if err != nil && err != http.ErrServerClosed {
74                 log.Fatal(err)
75         }
76
77         <-connectionsClose
78 }