Add timeattack detector

This commit is contained in:
9seconds
2021-03-18 11:07:51 +03:00
parent 172b596cf1
commit f3112d4ba6
7 changed files with 124 additions and 12 deletions
+36
View File
@@ -0,0 +1,36 @@
package timeattack
import (
"fmt"
"time"
"github.com/9seconds/mtg/v2/mtglib"
)
type detector struct {
time.Duration
}
func (d detector) Valid(then time.Time) error {
now := time.Now()
diff := now.Sub(then)
if diff < 0 {
diff = -diff
}
if diff > d.Duration {
return fmt.Errorf("time is invalid. now=%d, then=%d, diff=%v",
now.Unix(),
then.Unix(),
diff)
}
return nil
}
func NewDetector(duration time.Duration) mtglib.TimeAttackDetector {
return detector{
Duration: duration,
}
}
+28
View File
@@ -0,0 +1,28 @@
package timeattack_test
import (
"testing"
"time"
"github.com/9seconds/mtg/v2/timeattack"
"github.com/stretchr/testify/suite"
)
type DetectorTestSuite struct {
suite.Suite
}
func (suite *DetectorTestSuite) TestOp() {
d := timeattack.NewDetector(time.Second)
suite.NoError(d.Valid(time.Now()))
suite.NoError(d.Valid(time.Now().Add(100 * time.Millisecond)))
suite.NoError(d.Valid(time.Now().Add(-100 * time.Millisecond)))
suite.Error(d.Valid(time.Now().Add(time.Hour)))
suite.Error(d.Valid(time.Now().Add(-time.Hour)))
}
func TestDetector(t *testing.T) {
t.Parallel()
suite.Run(t, &DetectorTestSuite{})
}
+15
View File
@@ -0,0 +1,15 @@
package timeattack
import (
"time"
"github.com/9seconds/mtg/v2/mtglib"
)
type noop struct{}
func (n noop) Valid(_ time.Time) error { return nil }
func NewNoop() mtglib.TimeAttackDetector {
return noop{}
}
+26
View File
@@ -0,0 +1,26 @@
package timeattack_test
import (
"testing"
"time"
"github.com/9seconds/mtg/v2/timeattack"
"github.com/stretchr/testify/suite"
)
type NoopTestSuite struct {
suite.Suite
}
func (suite *NoopTestSuite) TestOp() {
d := timeattack.NewNoop()
suite.NoError(d.Valid(time.Now()))
suite.NoError(d.Valid(time.Now().Add(time.Hour)))
suite.NoError(d.Valid(time.Now().Add(-time.Hour)))
}
func TestNoop(t *testing.T) {
t.Parallel()
suite.Run(t, &NoopTestSuite{})
}