ci-platforms / darwin arm64 smoke (push) Skipped
ci / build (amd64, linux, ubuntu-24.04) (push) Failing after 12m19s
ci-platforms / darwin amd64 smoke (push) Skipped
ci-platforms / windows amd64 smoke (push) Skipped
github-native / gitea-pending (push) Skipped
github-native / darwin amd64 native (push) Skipped
github-native / linux amd64 native (push) Skipped
github-native / windows amd64 native (push) Skipped
github-native / darwin arm64 native (push) Skipped
github-native / gitea-result (push) Skipped
ci / checks (push) Failing after 23m57s
ci / release (push) Skipped
GitHub / windows amd64 native GitHub-hosted native CI: failure
GitHub / darwin arm64 native GitHub-hosted native CI: failure
GitHub / darwin amd64 native GitHub-hosted native CI: failure
GitHub / linux amd64 native GitHub-hosted native CI: success
61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
package playground
|
|
|
|
import (
|
|
"io/fs"
|
|
"sync"
|
|
"testing"
|
|
)
|
|
|
|
func TestMemoryUserConcurrentReadWriteAndList(t *testing.T) {
|
|
m := &memUser{files: map[string][]byte{}}
|
|
start := make(chan struct{})
|
|
var wg sync.WaitGroup
|
|
for worker := range 4 {
|
|
wg.Go(func() {
|
|
<-start
|
|
for i := range 1000 {
|
|
if worker == 0 {
|
|
if err := m.WriteFile("saves/slot", []byte{byte(i)}); err != nil {
|
|
t.Error(err)
|
|
}
|
|
if i%2 == 0 {
|
|
if err := m.Remove("saves/slot"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
} else {
|
|
if _, err := m.ReadFile("saves/slot"); err != nil && err != fs.ErrNotExist {
|
|
t.Error(err)
|
|
}
|
|
if _, err := m.Stat("saves/slot"); err != nil && err != fs.ErrNotExist {
|
|
t.Error(err)
|
|
}
|
|
if _, err := m.List("saves"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
close(start)
|
|
wg.Wait()
|
|
}
|
|
|
|
func TestMemoryUserCopiesBytes(t *testing.T) {
|
|
m := &memUser{files: map[string][]byte{}}
|
|
data := []byte("save")
|
|
if err := m.WriteFile("saves/slot", data); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
data[0] = 'X'
|
|
read, err := m.ReadFile("saves/slot")
|
|
if err != nil || string(read) != "save" {
|
|
t.Fatalf("write did not retain a copy: %q %v", read, err)
|
|
}
|
|
read[0] = 'Y'
|
|
read, err = m.ReadFile("saves/slot")
|
|
if err != nil || string(read) != "save" {
|
|
t.Fatalf("read exposed the stored bytes: %q %v", read, err)
|
|
}
|
|
}
|