37 lines
1.4 KiB
Go
37 lines
1.4 KiB
Go
// saas-mock serves approved, static SaaS test snapshots through the formal
|
|
// Dispatcher configuration API. It never creates calls or publishes MQ jobs.
|
|
package main
|
|
|
|
import (
|
|
"errors"
|
|
"flag"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
dataDir := flag.String("data", "", "private directory with sip.json, providers.json, quota.json and tasks/*.json")
|
|
dispatcherID := flag.String("dispatcher-id", "", "approved test Dispatcher UUID")
|
|
listen := flag.String("listen", "", "explicit HTTPS listen address")
|
|
cert := flag.String("tls-cert", "", "HTTPS certificate file")
|
|
key := flag.String("tls-key", "", "HTTPS private key file")
|
|
flag.Parse()
|
|
secret := os.Getenv("SAAS_MOCK_DISPATCHER_SECRET")
|
|
brokerURL := os.Getenv("SAAS_MOCK_RABBITMQ_URL")
|
|
if *dataDir == "" || *dispatcherID == "" || *listen == "" || *cert == "" || *key == "" || secret == "" || brokerURL == "" || flag.NArg() != 0 {
|
|
log.Fatal(errors.New("data, dispatcher-id, listen, tls-cert, tls-key, SAAS_MOCK_DISPATCHER_SECRET and SAAS_MOCK_RABBITMQ_URL are required"))
|
|
}
|
|
data, err := loadDataset(*dataDir, *dispatcherID)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if err := provisionMQ(brokerURL, data); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
log.Printf("SaaS test configuration and MQ topology ready: tasks=%d dispatcher=%s", len(data.tasks), *dispatcherID)
|
|
server := http.Server{Addr: *listen, Handler: data.handler(secret), ReadHeaderTimeout: 5 * time.Second}
|
|
log.Fatal(server.ListenAndServeTLS(*cert, *key))
|
|
}
|