mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-29 07:22:24 -05:00
[chore] Test fixes (#788)
* use 'test' value for testrig storage backend * update test dependency * add WaitFor func in testrig * use WaitFor function instead of time.Sleep * tidy up tests * make SentMessages a sync.map * go fmt
This commit is contained in:
parent
bee8458a2d
commit
0245c606d7
30 changed files with 501 additions and 222 deletions
|
|
@ -19,9 +19,6 @@
|
|||
package testrig
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path"
|
||||
|
||||
"github.com/coreos/go-oidc/v3/oidc"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/config"
|
||||
)
|
||||
|
|
@ -29,12 +26,11 @@ import (
|
|||
// InitTestConfig initializes viper configuration with test defaults.
|
||||
func InitTestConfig() {
|
||||
config.Config(func(cfg *config.Configuration) {
|
||||
*cfg = TestDefaults
|
||||
*cfg = testDefaults
|
||||
})
|
||||
}
|
||||
|
||||
// TestDefaults returns a Values struct with values set that are suitable for local testing.
|
||||
var TestDefaults = config.Configuration{
|
||||
var testDefaults = config.Configuration{
|
||||
LogLevel: "trace",
|
||||
LogDbQueries: true,
|
||||
ApplicationName: "gotosocial",
|
||||
|
|
@ -69,8 +65,11 @@ var TestDefaults = config.Configuration{
|
|||
MediaDescriptionMaxChars: 500,
|
||||
MediaRemoteCacheDays: 30,
|
||||
|
||||
StorageBackend: "local",
|
||||
StorageLocalBasePath: path.Join(os.TempDir(), "gotosocial"),
|
||||
// the testrig only uses in-memory storage, so we can
|
||||
// safely set this value to 'test' to avoid running storage
|
||||
// migrations, and other silly things like that
|
||||
StorageBackend: "test",
|
||||
StorageLocalBasePath: "",
|
||||
|
||||
StatusesMaxChars: 5000,
|
||||
StatusesCWMaxChars: 100,
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import (
|
|||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/superseriousbusiness/activity/pub"
|
||||
"github.com/superseriousbusiness/activity/streams"
|
||||
|
|
@ -64,7 +65,7 @@ type MockHTTPClient struct {
|
|||
testRemoteServices map[string]vocab.ActivityStreamsService
|
||||
testRemoteAttachments map[string]RemoteAttachmentFile
|
||||
|
||||
SentMessages map[string][]byte
|
||||
SentMessages sync.Map
|
||||
}
|
||||
|
||||
// NewMockHTTPClient returns a client that conforms to the pub.HttpClient interface.
|
||||
|
|
@ -90,8 +91,6 @@ func NewMockHTTPClient(do func(req *http.Request) (*http.Response, error), relat
|
|||
mockHTTPClient.testRemoteServices = NewTestFediServices()
|
||||
mockHTTPClient.testRemoteAttachments = NewTestFediAttachments(relativeMediaPath)
|
||||
|
||||
mockHTTPClient.SentMessages = make(map[string][]byte)
|
||||
|
||||
mockHTTPClient.do = func(req *http.Request) (*http.Response, error) {
|
||||
responseCode := http.StatusNotFound
|
||||
responseBytes := []byte(`{"error":"404 not found"}`)
|
||||
|
|
@ -103,7 +102,15 @@ func NewMockHTTPClient(do func(req *http.Request) (*http.Response, error), relat
|
|||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
mockHTTPClient.SentMessages[req.URL.String()] = b
|
||||
|
||||
if sI, loaded := mockHTTPClient.SentMessages.LoadOrStore(req.URL.String(), [][]byte{b}); loaded {
|
||||
s, ok := sI.([][]byte)
|
||||
if !ok {
|
||||
panic("SentMessages entry wasn't [][]byte")
|
||||
}
|
||||
s = append(s, b)
|
||||
mockHTTPClient.SentMessages.Store(req.URL.String(), s)
|
||||
}
|
||||
|
||||
responseCode = http.StatusOK
|
||||
responseBytes = []byte(`{"ok":"accepted"}`)
|
||||
|
|
|
|||
|
|
@ -87,3 +87,28 @@ func TimeMustParse(timeString string) time.Time {
|
|||
}
|
||||
return t
|
||||
}
|
||||
|
||||
// WaitFor calls condition every 200ms, returning true
|
||||
// when condition() returns true, or false after 5s.
|
||||
//
|
||||
// It's useful for when you're waiting for something to
|
||||
// happen, but you don't know exactly how long it will take,
|
||||
// and you want to fail if the thing doesn't happen within 5s.
|
||||
func WaitFor(condition func() bool) bool {
|
||||
tick := time.NewTicker(200 * time.Millisecond)
|
||||
defer tick.Stop()
|
||||
|
||||
timeout := time.NewTimer(5 * time.Second)
|
||||
defer timeout.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-tick.C:
|
||||
if condition() {
|
||||
return true
|
||||
}
|
||||
case <-timeout.C:
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue