app/server_test: make sure sentry is ready to be setup (#16260)

Этот коммит содержится в:
Ibrahim Serdar Acikgoz
2020-11-13 19:10:10 +03:00
коммит произвёл GitHub
родитель c9a4a475d3
Коммит 46a409aef6

Просмотреть файл

@@ -6,7 +6,9 @@ package app
import ( import (
"bufio" "bufio"
"crypto/tls" "crypto/tls"
"errors"
"fmt" "fmt"
"io"
"io/ioutil" "io/ioutil"
"net" "net"
"net/http" "net/http"
@@ -365,19 +367,23 @@ func TestSentry(t *testing.T) {
client := &http.Client{Timeout: 5 * time.Second, Transport: &http.Transport{ client := &http.Client{Timeout: 5 * time.Second, Transport: &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}} }}
data1 := make(chan bool, 1) testDir, _ := fileutils.FindDir("tests")
server1 := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { t.Run("sentry is disabled, should not receive a report", func(t *testing.T) {
data := make(chan bool, 1)
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
t.Log("Received sentry request for some reason") t.Log("Received sentry request for some reason")
data1 <- true data <- true
})) }))
defer server1.Close() defer server.Close()
// make sure we don't report anything when sentry is disabled // make sure we don't report anything when sentry is disabled
_, port, _ := net.SplitHostPort(server1.Listener.Addr().String()) _, port, _ := net.SplitHostPort(server.Listener.Addr().String())
SENTRY_DSN = fmt.Sprintf("http://test:test@localhost:%s/123", port) dsn, err := sentry.NewDsn(fmt.Sprintf("http://test:test@localhost:%s/123", port))
require.NoError(t, err)
SENTRY_DSN = dsn.String()
testDir, _ := fileutils.FindDir("tests")
s, err := NewServer(func(server *Server) error { s, err := NewServer(func(server *Server) error {
configStore, _ := config.NewFileStore("config.json", true) configStore, _ := config.NewFileStore("config.json", true)
store, _ := config.NewStoreFromBacking(configStore) store, _ := config.NewStoreFromBacking(configStore)
@@ -388,41 +394,48 @@ func TestSentry(t *testing.T) {
*cfg.ServiceSettings.ConnectionSecurity = "TLS" *cfg.ServiceSettings.ConnectionSecurity = "TLS"
*cfg.ServiceSettings.TLSKeyFile = path.Join(testDir, "tls_test_key.pem") *cfg.ServiceSettings.TLSKeyFile = path.Join(testDir, "tls_test_key.pem")
*cfg.ServiceSettings.TLSCertFile = path.Join(testDir, "tls_test_cert.pem") *cfg.ServiceSettings.TLSCertFile = path.Join(testDir, "tls_test_cert.pem")
*cfg.LogSettings.EnableDiagnostics = true
}) })
return nil return nil
}) })
require.NoError(t, err) require.NoError(t, err)
// Route for just panicing // Route for just panicing
s.Router.HandleFunc("/panic", func(writer http.ResponseWriter, request *http.Request) { s.Router.HandleFunc("/panic", func(writer http.ResponseWriter, request *http.Request) {
panic("log this panic") panic("log this panic")
}) })
serverErr := s.Start() require.NoError(t, s.Start())
require.NoError(t, serverErr)
defer s.Shutdown() defer s.Shutdown()
resp, err := client.Get("https://localhost:" + strconv.Itoa(s.ListenAddr.Port) + "/panic") resp, err := client.Get("https://localhost:" + strconv.Itoa(s.ListenAddr.Port) + "/panic")
require.Nil(t, resp) require.Nil(t, resp)
require.Error(t, err) require.True(t, errors.Is(err, io.EOF), fmt.Sprintf("unexpected error: %s", err))
sentry.Flush(time.Second * 1) sentry.Flush(time.Second)
select { select {
case <-data1: case <-data:
require.Fail(t, "Sentry received a message, even though it's disabled!") require.Fail(t, "Sentry received a message, even though it's disabled!")
case <-time.After(time.Second * 1): case <-time.After(time.Second):
t.Log("Sentry request didn't arrive. Good!") t.Log("Sentry request didn't arrive. Good!")
} }
})
// check successful report t.Run("sentry is enabled, report should be received", func(t *testing.T) {
data2 := make(chan bool, 1) data := make(chan bool, 1)
server2 := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
t.Log("Received sentry request!") t.Log("Received sentry request!")
data2 <- true data <- true
})) }))
defer server2.Close() defer server.Close()
_, port, _ = net.SplitHostPort(server2.Listener.Addr().String())
SENTRY_DSN = fmt.Sprintf("http://test:test@localhost:%s/123", port) _, port, _ := net.SplitHostPort(server.Listener.Addr().String())
s2, err := NewServer(func(server *Server) error { dsn, err := sentry.NewDsn(fmt.Sprintf("http://test:test@localhost:%s/123", port))
require.NoError(t, err)
SENTRY_DSN = dsn.String()
s, err := NewServer(func(server *Server) error {
configStore, _ := config.NewFileStore("config.json", true) configStore, _ := config.NewFileStore("config.json", true)
store, _ := config.NewStoreFromBacking(configStore) store, _ := config.NewStoreFromBacking(configStore)
server.configStore = store server.configStore = store
@@ -432,26 +445,30 @@ func TestSentry(t *testing.T) {
*cfg.ServiceSettings.TLSKeyFile = path.Join(testDir, "tls_test_key.pem") *cfg.ServiceSettings.TLSKeyFile = path.Join(testDir, "tls_test_key.pem")
*cfg.ServiceSettings.TLSCertFile = path.Join(testDir, "tls_test_cert.pem") *cfg.ServiceSettings.TLSCertFile = path.Join(testDir, "tls_test_cert.pem")
*cfg.LogSettings.EnableSentry = true *cfg.LogSettings.EnableSentry = true
*cfg.LogSettings.EnableDiagnostics = true
}) })
return nil return nil
}) })
require.NoError(t, err) require.NoError(t, err)
// Route for just panicing // Route for just panicing
s2.Router.HandleFunc("/panic", func(writer http.ResponseWriter, request *http.Request) { s.Router.HandleFunc("/panic", func(writer http.ResponseWriter, request *http.Request) {
panic("log this panic") panic("log this panic")
}) })
require.NoError(t, s2.Start()) require.NoError(t, s.Start())
defer s2.Shutdown() defer s.Shutdown()
resp, err = client.Get("https://localhost:" + strconv.Itoa(s2.ListenAddr.Port) + "/panic")
resp, err := client.Get("https://localhost:" + strconv.Itoa(s.ListenAddr.Port) + "/panic")
require.Nil(t, resp) require.Nil(t, resp)
require.Error(t, err) require.True(t, errors.Is(err, io.EOF), fmt.Sprintf("unexpected error: %s", err))
sentry.Flush(time.Second * 1)
sentry.Flush(time.Second)
select { select {
case <-data2: case <-data:
t.Log("Sentry request arrived. Good!") t.Log("Sentry request arrived. Good!")
case <-time.After(time.Second * 2): case <-time.After(time.Second * 10):
require.Fail(t, "Sentry report didn't arrive") require.Fail(t, "Sentry report didn't arrive")
} }
})
} }