Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
p2p
go-p2p-pubsub
Commits
5cd1316e
Commit
5cd1316e
authored
Mar 31, 2021
by
nisdas
Committed by
vyzo
Mar 31, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
strengthen validation
parent
84302e96
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
65 additions
and
24 deletions
+65
-24
score_params.go
score_params.go
+30
-24
score_params_test.go
score_params_test.go
+35
-0
No files found.
score_params.go
View file @
5cd1316e
...
...
@@ -199,47 +199,47 @@ func (p *PeerScoreParams) validate() error {
func
(
p
*
TopicScoreParams
)
validate
()
error
{
// make sure we have a sane topic weight
if
p
.
TopicWeight
<
0
{
return
fmt
.
Errorf
(
"invalid topic weight; must be >= 0"
)
if
p
.
TopicWeight
<
0
||
isInvalidNumber
(
p
.
TopicWeight
)
{
return
fmt
.
Errorf
(
"invalid topic weight; must be >= 0
and a valid number
"
)
}
// check P1
if
p
.
TimeInMeshQuantum
==
0
{
return
fmt
.
Errorf
(
"invalid TimeInMeshQuantum; must be non zero"
)
}
if
p
.
TimeInMeshWeight
<
0
{
return
fmt
.
Errorf
(
"invalid TimeInMeshWeight; must be positive (or 0 to disable)"
)
if
p
.
TimeInMeshWeight
<
0
||
isInvalidNumber
(
p
.
TimeInMeshWeight
)
{
return
fmt
.
Errorf
(
"invalid TimeInMeshWeight; must be positive (or 0 to disable)
and a valid number
"
)
}
if
p
.
TimeInMeshWeight
!=
0
&&
p
.
TimeInMeshQuantum
<=
0
{
return
fmt
.
Errorf
(
"invalid TimeInMeshQuantum; must be positive"
)
}
if
p
.
TimeInMeshWeight
!=
0
&&
p
.
TimeInMeshCap
<=
0
{
return
fmt
.
Errorf
(
"invalid TimeInMeshCap; must be positive"
)
if
p
.
TimeInMeshWeight
!=
0
&&
(
p
.
TimeInMeshCap
<=
0
||
isInvalidNumber
(
p
.
TimeInMeshCap
))
{
return
fmt
.
Errorf
(
"invalid TimeInMeshCap; must be positive
and a valid number
"
)
}
// check P2
if
p
.
FirstMessageDeliveriesWeight
<
0
{
return
fmt
.
Errorf
(
"invallid FirstMessageDeliveriesWeight; must be positive (or 0 to disable)"
)
if
p
.
FirstMessageDeliveriesWeight
<
0
||
isInvalidNumber
(
p
.
FirstMessageDeliveriesWeight
)
{
return
fmt
.
Errorf
(
"invallid FirstMessageDeliveriesWeight; must be positive (or 0 to disable)
and a valid number
"
)
}
if
p
.
FirstMessageDeliveriesWeight
!=
0
&&
(
p
.
FirstMessageDeliveriesDecay
<=
0
||
p
.
FirstMessageDeliveriesDecay
>=
1
)
{
if
p
.
FirstMessageDeliveriesWeight
!=
0
&&
(
p
.
FirstMessageDeliveriesDecay
<=
0
||
p
.
FirstMessageDeliveriesDecay
>=
1
||
isInvalidNumber
(
p
.
FirstMessageDeliveriesDecay
)
)
{
return
fmt
.
Errorf
(
"invalid FirstMessageDeliveriesDecay; must be between 0 and 1"
)
}
if
p
.
FirstMessageDeliveriesWeight
!=
0
&&
p
.
FirstMessageDeliveriesCap
<=
0
{
return
fmt
.
Errorf
(
"invalid FirstMessageDeliveriesCap; must be positive"
)
if
p
.
FirstMessageDeliveriesWeight
!=
0
&&
(
p
.
FirstMessageDeliveriesCap
<=
0
||
isInvalidNumber
(
p
.
FirstMessageDeliveriesCap
))
{
return
fmt
.
Errorf
(
"invalid FirstMessageDeliveriesCap; must be positive
and a valid number
"
)
}
// check P3
if
p
.
MeshMessageDeliveriesWeight
>
0
{
return
fmt
.
Errorf
(
"invalid MeshMessageDeliveriesWeight; must be negative (or 0 to disable)"
)
if
p
.
MeshMessageDeliveriesWeight
>
0
||
isInvalidNumber
(
p
.
MeshFailurePenaltyWeight
)
{
return
fmt
.
Errorf
(
"invalid MeshMessageDeliveriesWeight; must be negative (or 0 to disable)
and a valid number
"
)
}
if
p
.
MeshMessageDeliveriesWeight
!=
0
&&
(
p
.
MeshMessageDeliveriesDecay
<=
0
||
p
.
MeshMessageDeliveriesDecay
>=
1
)
{
if
p
.
MeshMessageDeliveriesWeight
!=
0
&&
(
p
.
MeshMessageDeliveriesDecay
<=
0
||
p
.
MeshMessageDeliveriesDecay
>=
1
||
isInvalidNumber
(
p
.
MeshMessageDeliveriesDecay
)
)
{
return
fmt
.
Errorf
(
"invalid MeshMessageDeliveriesDecay; must be between 0 and 1"
)
}
if
p
.
MeshMessageDeliveriesWeight
!=
0
&&
p
.
MeshMessageDeliveriesCap
<=
0
{
return
fmt
.
Errorf
(
"invalid MeshMessageDeliveriesCap; must be positive"
)
if
p
.
MeshMessageDeliveriesWeight
!=
0
&&
(
p
.
MeshMessageDeliveriesCap
<=
0
||
isInvalidNumber
(
p
.
MeshMessageDeliveriesCap
))
{
return
fmt
.
Errorf
(
"invalid MeshMessageDeliveriesCap; must be positive
and a valid number
"
)
}
if
p
.
MeshMessageDeliveriesWeight
!=
0
&&
p
.
MeshMessageDeliveriesThreshold
<=
0
{
return
fmt
.
Errorf
(
"invalid MeshMessageDeliveriesThreshold; must be positive"
)
if
p
.
MeshMessageDeliveriesWeight
!=
0
&&
(
p
.
MeshMessageDeliveriesThreshold
<=
0
||
isInvalidNumber
(
p
.
MeshMessageDeliveriesThreshold
))
{
return
fmt
.
Errorf
(
"invalid MeshMessageDeliveriesThreshold; must be positive
and a valid number
"
)
}
if
p
.
MeshMessageDeliveriesWindow
<
0
{
return
fmt
.
Errorf
(
"invalid MeshMessageDeliveriesWindow; must be non-negative"
)
...
...
@@ -249,18 +249,18 @@ func (p *TopicScoreParams) validate() error {
}
// check P3b
if
p
.
MeshFailurePenaltyWeight
>
0
{
return
fmt
.
Errorf
(
"invalid MeshFailurePenaltyWeight; must be negative (or 0 to disable)"
)
if
p
.
MeshFailurePenaltyWeight
>
0
||
isInvalidNumber
(
p
.
MeshFailurePenaltyWeight
)
{
return
fmt
.
Errorf
(
"invalid MeshFailurePenaltyWeight; must be negative (or 0 to disable)
and a valid number
"
)
}
if
p
.
MeshFailurePenaltyWeight
!=
0
&&
(
p
.
MeshFailurePenaltyDecay
<=
0
||
p
.
MeshFailurePenaltyDecay
>=
1
)
{
if
p
.
MeshFailurePenaltyWeight
!=
0
&&
(
isInvalidNumber
(
p
.
MeshFailurePenaltyDecay
)
||
p
.
MeshFailurePenaltyDecay
<=
0
||
p
.
MeshFailurePenaltyDecay
>=
1
)
{
return
fmt
.
Errorf
(
"invalid MeshFailurePenaltyDecay; must be between 0 and 1"
)
}
// check P4
if
p
.
InvalidMessageDeliveriesWeight
>
0
{
return
fmt
.
Errorf
(
"invalid InvalidMessageDeliveriesWeight; must be negative (or 0 to disable)"
)
if
p
.
InvalidMessageDeliveriesWeight
>
0
||
isInvalidNumber
(
p
.
InvalidMessageDeliveriesWeight
)
{
return
fmt
.
Errorf
(
"invalid InvalidMessageDeliveriesWeight; must be negative (or 0 to disable)
and a valid number
"
)
}
if
p
.
InvalidMessageDeliveriesDecay
<=
0
||
p
.
InvalidMessageDeliveriesDecay
>=
1
{
if
p
.
InvalidMessageDeliveriesDecay
<=
0
||
p
.
InvalidMessageDeliveriesDecay
>=
1
||
isInvalidNumber
(
p
.
InvalidMessageDeliveriesDecay
)
{
return
fmt
.
Errorf
(
"invalid InvalidMessageDeliveriesDecay; must be between 0 and 1"
)
}
...
...
@@ -285,3 +285,9 @@ func ScoreParameterDecayWithBase(decay time.Duration, base time.Duration, decayT
ticks
:=
float64
(
decay
/
base
)
return
math
.
Pow
(
decayToZero
,
1
/
ticks
)
}
// checks whether the provided floating-point number is `Not a Number`
// or an infinite number.
func
isInvalidNumber
(
num
float64
)
bool
{
return
math
.
IsNaN
(
num
)
||
math
.
IsInf
(
num
,
0
)
}
score_params_test.go
View file @
5cd1316e
package
pubsub
import
(
"math"
"testing"
"time"
...
...
@@ -254,6 +255,40 @@ func TestPeerScoreParamsValidation(t *testing.T) {
t
.
Fatal
(
"expected validation failure"
)
}
// Checks the topic parameters for invalid values such as infinite and
// NaN numbers.
if
(
&
PeerScoreParams
{
TopicScoreCap
:
1
,
AppSpecificScore
:
appScore
,
DecayInterval
:
time
.
Second
,
DecayToZero
:
0.01
,
IPColocationFactorWeight
:
-
1
,
IPColocationFactorThreshold
:
1
,
Topics
:
map
[
string
]
*
TopicScoreParams
{
"test"
:
&
TopicScoreParams
{
TopicWeight
:
math
.
Inf
(
0
),
TimeInMeshWeight
:
math
.
NaN
(),
TimeInMeshQuantum
:
time
.
Second
,
TimeInMeshCap
:
10
,
FirstMessageDeliveriesWeight
:
math
.
Inf
(
1
),
FirstMessageDeliveriesDecay
:
0.5
,
FirstMessageDeliveriesCap
:
10
,
MeshMessageDeliveriesWeight
:
math
.
Inf
(
-
1
),
MeshMessageDeliveriesDecay
:
math
.
NaN
(),
MeshMessageDeliveriesCap
:
math
.
Inf
(
0
),
MeshMessageDeliveriesThreshold
:
5
,
MeshMessageDeliveriesWindow
:
time
.
Millisecond
,
MeshMessageDeliveriesActivation
:
time
.
Second
,
MeshFailurePenaltyWeight
:
-
1
,
MeshFailurePenaltyDecay
:
math
.
NaN
(),
InvalidMessageDeliveriesWeight
:
math
.
Inf
(
0
),
InvalidMessageDeliveriesDecay
:
math
.
NaN
(),
},
},
})
.
validate
()
==
nil
{
t
.
Fatal
(
"expected validation failure"
)
}
}
func
TestScoreParameterDecay
(
t
*
testing
.
T
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment