Skip to content

Commit

Permalink
update design doc and move tests
Browse files Browse the repository at this point in the history
Signed-off-by: ZhouJianMS <zhoujian@microsoft.com>
  • Loading branch information
ZhouJianMS committed Nov 9, 2023
1 parent 3b612e3 commit e2975e9
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 159 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,12 @@ List the failpoints,
$ curl http://127.0.0.1:1234/SomeFuncString=return("hello")
```

Retrieve the execution count of a failpoint,

```sh
$curl http://127.0.0.1:1234/SomeFuncString/execution-count -XGET
```

Deactivate a failpoint,

```sh
Expand Down
10 changes: 10 additions & 0 deletions doc/design.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,16 @@ Similarly, you can set multiple failpoints using endpoint `/failpoints`,
curl http://127.0.0.1:22381/failpoints -X PUT -d'failpoint1=return("hello");failpoint2=sleep(10)'
```

You can get the execution count of the failpoint in the dynamic way,
```
$curl http://127.0.0.1:1234/SomeFuncString/execution-count -XGET
```

To deactivate a failpoint,
```
$ curl http://127.0.0.1:1234/SomeFuncString -XDELETE
```

#### 3.2 Unit test
Assuming there is a function with a failpoint something like below,
```
Expand Down
2 changes: 1 addition & 1 deletion runtime/terms.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ func (t *terms) eval() interface{} {
for _, term := range t.chain {
if term.mods.allow() {
t.counter++
return term.do(), nil
return term.do()
}
}
return nil
Expand Down
42 changes: 42 additions & 0 deletions runtime/terms_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,45 @@ func TestTermsTypes(t *testing.T) {
}
}
}

func TestTermsCounter(t *testing.T) {
tests := []struct {
failpointTerm string
runAfterEnabling int
wantCount int
}{
{
failpointTerm: `10*sleep(10)->1*return("abc")`,
runAfterEnabling: 12,
// This example tests mods which allows users to restrict the
// number of failpoint actions as against their callsite executions.
// This is the reason why wantCount < runAfterEnabling
// In a real world example you can hit a code spot a million times but
// using mods restrict the associated fallpoint actions to run twice.
wantCount: 11,
},
{
failpointTerm: `10*sleep(10)->1*return("abc")`,
runAfterEnabling: 3,
wantCount: 3,
},
{
failpointTerm: `10*sleep(10)->1*return("abc")`,
runAfterEnabling: 0,
wantCount: 0,
},
}
for _, tt := range tests {
ter, err := newTerms("test", tt.failpointTerm)
if err != nil {
t.Fatal(err)
}
for i := 0; i < tt.runAfterEnabling; i++ {
_ = ter.eval()
}

if ter.counter != tt.wantCount {
t.Fatalf("counter is not properly incremented")
}
}
}
158 changes: 0 additions & 158 deletions runtime/termscounter_test.go

This file was deleted.

0 comments on commit e2975e9

Please sign in to comment.