diff --git a/cmd/dendrite/personalities/monolith.go b/cmd/dendrite-monolith-server/main.go similarity index 76% rename from cmd/dendrite/personalities/monolith.go rename to cmd/dendrite-monolith-server/main.go index b6da580de..e935805f6 100644 --- a/cmd/dendrite/personalities/monolith.go +++ b/cmd/dendrite-monolith-server/main.go @@ -1,6 +1,23 @@ -package personalities +// Copyright 2017 Vector Creations Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main import ( + "flag" + "os" + "github.com/matrix-org/dendrite/appservice" "github.com/matrix-org/dendrite/eduserver" "github.com/matrix-org/dendrite/eduserver/cache" @@ -15,7 +32,18 @@ import ( "github.com/sirupsen/logrus" ) -func Monolith(base *setup.BaseDendrite, cfg *config.Dendrite) { +var ( + httpBindAddr = flag.String("http-bind-address", ":8008", "The HTTP listening port for the server") + httpsBindAddr = flag.String("https-bind-address", ":8448", "The HTTPS listening port for the server") + apiBindAddr = flag.String("api-bind-address", "localhost:18008", "The HTTP listening port for the internal HTTP APIs (if -api is enabled)") + certFile = flag.String("tls-cert", "", "The PEM formatted X509 certificate to use for TLS") + keyFile = flag.String("tls-key", "", "The PEM private key to use for TLS") + enableHTTPAPIs = flag.Bool("api", false, "Use HTTP APIs instead of short-circuiting (warning: exposes API endpoints!)") + traceInternal = os.Getenv("DENDRITE_TRACE_INTERNAL") == "1" +) + +func main() { + cfg := setup.ParseFlags(true) httpAddr := config.HTTPAddress("http://" + *httpBindAddr) httpsAddr := config.HTTPAddress("https://" + *httpsBindAddr) httpAPIAddr := httpAddr diff --git a/cmd/dendrite-monolith-server/main_test.go b/cmd/dendrite-monolith-server/main_test.go new file mode 100644 index 000000000..efa1a926c --- /dev/null +++ b/cmd/dendrite-monolith-server/main_test.go @@ -0,0 +1,50 @@ +package main + +import ( + "os" + "os/signal" + "strings" + "syscall" + "testing" +) + +// This is an instrumented main, used when running integration tests (sytest) with code coverage. +// Compile: go test -c -race -cover -covermode=atomic -o monolith.debug -coverpkg "github.com/matrix-org/..." ./cmd/dendrite-monolith-server +// Run the monolith: ./monolith.debug -test.coverprofile=/somewhere/to/dump/integrationcover.out DEVEL --config dendrite.yaml +// Generate HTML with coverage: go tool cover -html=/somewhere/where/there/is/integrationcover.out -o cover.html +// Source: https://dzone.com/articles/measuring-integration-test-coverage-rate-in-pouchc +func TestMain(_ *testing.T) { + var ( + args []string + ) + + for _, arg := range os.Args { + switch { + case strings.HasPrefix(arg, "DEVEL"): + case strings.HasPrefix(arg, "-test"): + default: + args = append(args, arg) + } + } + // only run the tests if there are args to be passed + if len(args) <= 1 { + return + } + + waitCh := make(chan int, 1) + os.Args = args + go func() { + main() + close(waitCh) + }() + + signalCh := make(chan os.Signal, 1) + signal.Notify(signalCh, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGHUP) + + select { + case <-signalCh: + return + case <-waitCh: + return + } +} diff --git a/cmd/dendrite/main.go b/cmd/dendrite-polylith-server/main.go similarity index 96% rename from cmd/dendrite/main.go rename to cmd/dendrite-polylith-server/main.go index 0e5ab4033..ba9e4c73e 100644 --- a/cmd/dendrite/main.go +++ b/cmd/dendrite-polylith-server/main.go @@ -27,7 +27,6 @@ func main() { "federationsender": personalities.FederationSender, "keyserver": personalities.KeyServer, "mediaapi": personalities.MediaAPI, - "monolith": personalities.Monolith, "roomserver": personalities.RoomServer, "signingkeyserver": personalities.SigningKeyServer, "syncapi": personalities.SyncAPI, diff --git a/cmd/dendrite/personalities/appservice.go b/cmd/dendrite-polylith-server/personalities/appservice.go similarity index 100% rename from cmd/dendrite/personalities/appservice.go rename to cmd/dendrite-polylith-server/personalities/appservice.go diff --git a/cmd/dendrite/personalities/clientapi.go b/cmd/dendrite-polylith-server/personalities/clientapi.go similarity index 100% rename from cmd/dendrite/personalities/clientapi.go rename to cmd/dendrite-polylith-server/personalities/clientapi.go diff --git a/cmd/dendrite/personalities/eduserver.go b/cmd/dendrite-polylith-server/personalities/eduserver.go similarity index 100% rename from cmd/dendrite/personalities/eduserver.go rename to cmd/dendrite-polylith-server/personalities/eduserver.go diff --git a/cmd/dendrite/personalities/federationapi.go b/cmd/dendrite-polylith-server/personalities/federationapi.go similarity index 100% rename from cmd/dendrite/personalities/federationapi.go rename to cmd/dendrite-polylith-server/personalities/federationapi.go diff --git a/cmd/dendrite/personalities/federationsender.go b/cmd/dendrite-polylith-server/personalities/federationsender.go similarity index 100% rename from cmd/dendrite/personalities/federationsender.go rename to cmd/dendrite-polylith-server/personalities/federationsender.go diff --git a/cmd/dendrite/personalities/keyserver.go b/cmd/dendrite-polylith-server/personalities/keyserver.go similarity index 100% rename from cmd/dendrite/personalities/keyserver.go rename to cmd/dendrite-polylith-server/personalities/keyserver.go diff --git a/cmd/dendrite/personalities/mediaapi.go b/cmd/dendrite-polylith-server/personalities/mediaapi.go similarity index 100% rename from cmd/dendrite/personalities/mediaapi.go rename to cmd/dendrite-polylith-server/personalities/mediaapi.go diff --git a/cmd/dendrite/personalities/roomserver.go b/cmd/dendrite-polylith-server/personalities/roomserver.go similarity index 100% rename from cmd/dendrite/personalities/roomserver.go rename to cmd/dendrite-polylith-server/personalities/roomserver.go diff --git a/cmd/dendrite/personalities/signingkeyserver.go b/cmd/dendrite-polylith-server/personalities/signingkeyserver.go similarity index 100% rename from cmd/dendrite/personalities/signingkeyserver.go rename to cmd/dendrite-polylith-server/personalities/signingkeyserver.go diff --git a/cmd/dendrite/personalities/syncapi.go b/cmd/dendrite-polylith-server/personalities/syncapi.go similarity index 100% rename from cmd/dendrite/personalities/syncapi.go rename to cmd/dendrite-polylith-server/personalities/syncapi.go diff --git a/cmd/dendrite/personalities/userapi.go b/cmd/dendrite-polylith-server/personalities/userapi.go similarity index 100% rename from cmd/dendrite/personalities/userapi.go rename to cmd/dendrite-polylith-server/personalities/userapi.go