mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-09-19 09:40:12 +00:00
test(agentcompat): add agent runtime harness
Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
//go:build linux && agentcompat
|
||||
|
||||
package agent
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestPreparedBinary_ConcurrentConsumersSharePathAndBlockClose(t *testing.T) {
|
||||
prepared, err := PrepareBinary(t.Context(), testAgentSourceDir(t))
|
||||
require.NoError(t, err)
|
||||
t.Cleanup(func() { _ = prepared.Close() })
|
||||
|
||||
releases := make(chan func(), 8)
|
||||
errorsChannel := make(chan error, 8)
|
||||
var acquireGroup sync.WaitGroup
|
||||
for range 8 {
|
||||
acquireGroup.Add(1)
|
||||
go func() {
|
||||
defer acquireGroup.Done()
|
||||
path, release, acquireErr := prepared.acquire()
|
||||
if acquireErr == nil && path != prepared.BinaryPath() {
|
||||
acquireErr = fmt.Errorf("acquired path %q differs from prepared path", path)
|
||||
}
|
||||
errorsChannel <- acquireErr
|
||||
if acquireErr == nil {
|
||||
releases <- release
|
||||
}
|
||||
}()
|
||||
}
|
||||
acquireGroup.Wait()
|
||||
close(errorsChannel)
|
||||
close(releases)
|
||||
for acquireErr := range errorsChannel {
|
||||
require.NoError(t, acquireErr)
|
||||
}
|
||||
|
||||
closeErr := prepared.Close()
|
||||
var usageErr *PreparedBinaryUsageError
|
||||
require.ErrorAs(t, closeErr, &usageErr)
|
||||
require.Equal(t, "has active consumers", usageErr.Reason)
|
||||
|
||||
var releaseGroup sync.WaitGroup
|
||||
for release := range releases {
|
||||
releaseGroup.Add(1)
|
||||
go func() {
|
||||
defer releaseGroup.Done()
|
||||
release()
|
||||
}()
|
||||
}
|
||||
releaseGroup.Wait()
|
||||
require.NoError(t, prepared.Close())
|
||||
}
|
||||
Reference in New Issue
Block a user