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 12, 2023
1 parent 3b612e3 commit 88b6b0c
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 160 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/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 a failpoint in the dynamic way,
```
$curl http://127.0.0.1:1234/SomeFuncString/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
3 changes: 2 additions & 1 deletion runtime/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
package runtime

import (
"errors"
"fmt"
"io"
"net"
Expand Down Expand Up @@ -96,7 +97,7 @@ func (*httpHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fp := key[:len(key)-len("/count")]
_, count, err := status(fp)
if err != nil {
if err == ErrNoExist {
if errors.Is(err, ErrNoExist) {
http.Error(w, "failed to GET: "+err.Error(), http.StatusNotFound)
} else {
http.Error(w, "failed to GET: "+err.Error(), http.StatusInternalServerError)
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
41 changes: 41 additions & 0 deletions runtime/terms_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,44 @@ 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,
// Note the chain of terms is allowed to be executed 11 times at most,
// including 10 times for the first term `10*sleep(10)` and 1 time for
// the second term `1*return("abc")`. So it's only evaluated 11 times
// even it's triggered 12 times.
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.Errorf("counter is not properly incremented, got: %d, want: %d", ter.counter, tt.wantCount)
}
}
}
158 changes: 0 additions & 158 deletions runtime/termscounter_test.go

This file was deleted.

0 comments on commit 88b6b0c

Please sign in to comment.