mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00

* Copy over boilerplate and begin implementing TestDAA. * Implement a fairly reliable method of hashing at a certain hashrate. * Convert the DAA test to an application. * Start kaspad and make sure that hashrate throttling works with that as well. * Finish implementing testConstantHashRate. * Tidied up a bit. * Convert TestDAA back into a go test. * Reorganize TestDAA to be more like a traditional test. * Add sudden hashrate drop/jump tests. * Simplify targetHashNanosecondsFunction. * Improve progress logs. * Add more tests. * Remove the no-longer relevant `hashes` part of targetHashNanosecondsFunction. * Implement a constant hashrate increase test. * Implement a constant hashrate decrease test. * Give the correct run duration to the constant hashrate decrease test. * Add cooldowns to exponential functions. * Add run.sh to the DAA test. * Add a README. * Add `daa` to run-slow.sh. * Make go lint happy. * Fix the README's title. * Keep running tests even if one of them failed on high block rate deviation. * Fix hashrate peak/valley tests. * Preallocate arrays for hash and mining durations. * Add more statistics to the "mined block" log. * Make sure runDAATest stops when it's suppposed to. * Add a newline after "5 minute cooldown." * Fix variable names. * Rename totalElapsedTime to tatalElapsedDuration. * In measureMachineHashNanoseconds, generate a random nonce only once. * In runDAATest, add "DAA" to the start/finish log. * Remove --logdir from kaspadRunCommand. * In runDAATest, enlarge the nonce range to the entirety of uint64. * Explain what targetHashNanosecondsFunction is. * Move RunKaspadForTesting into common. * Rename runForDuration to loopForDuration. * Make go lint happy. * Extract fetchBlockForMining to a separate function. * Extract waitUntilTargetHashDurationHadElapsed to a separate function. * Extract pushHashDuration and pushMiningDuration to separate functions. * Extract logMinedBlockStatsAndUpdateStatFields to a separate function. * Extract submitMinedBlock to a separate function. * Extract tryNonceForMiningAndIncrementNonce to a separate function. * Add comments. * Use a rolling average instead of appending to an array for performance/accuracy. * Change a word in a comment. * Explain why we wait for five minutes at the end of the exponential increase/decrease tests. Co-authored-by: Svarog <feanorr@gmail.com>
54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
package common
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/kaspanet/kaspad/domain/dagconfig"
|
|
"os"
|
|
"sync/atomic"
|
|
"syscall"
|
|
"testing"
|
|
)
|
|
|
|
// RunKaspadForTesting runs kaspad for testing purposes
|
|
func RunKaspadForTesting(t *testing.T, testName string, rpcAddress string) func() {
|
|
appDir, err := TempDir(testName)
|
|
if err != nil {
|
|
t.Fatalf("TempDir: %s", err)
|
|
}
|
|
|
|
kaspadRunCommand, err := StartCmd("KASPAD",
|
|
"kaspad",
|
|
NetworkCliArgumentFromNetParams(&dagconfig.DevnetParams),
|
|
"--appdir", appDir,
|
|
"--rpclisten", rpcAddress,
|
|
"--loglevel", "debug",
|
|
)
|
|
if err != nil {
|
|
t.Fatalf("StartCmd: %s", err)
|
|
}
|
|
t.Logf("Kaspad started with --appdir=%s", appDir)
|
|
|
|
isShutdown := uint64(0)
|
|
go func() {
|
|
err := kaspadRunCommand.Wait()
|
|
if err != nil {
|
|
if atomic.LoadUint64(&isShutdown) == 0 {
|
|
panic(fmt.Sprintf("Kaspad closed unexpectedly: %s. See logs at: %s", err, appDir))
|
|
}
|
|
}
|
|
}()
|
|
|
|
return func() {
|
|
err := kaspadRunCommand.Process.Signal(syscall.SIGTERM)
|
|
if err != nil {
|
|
t.Fatalf("Signal: %s", err)
|
|
}
|
|
err = os.RemoveAll(appDir)
|
|
if err != nil {
|
|
t.Fatalf("RemoveAll: %s", err)
|
|
}
|
|
atomic.StoreUint64(&isShutdown, 1)
|
|
t.Logf("Kaspad stopped")
|
|
}
|
|
}
|