forked from appscode/g2
-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Sync/Wait for processing handler #14
Merged
Merged
Changes from 1 commit
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
b525e23
Bump up work handle delay
e1dd57e
Change to poll for handler
00ad1c7
Make polling more fine-grained
a2995b4
Change to signalled handler map
cc27ea9
Make waiters key-specific
a8341bf
Fix timeout and waiters value to ref
5a9ee46
Restore remove of waiter
c8e661b
Add HandlerMap tests
d77c3af
Add test of actual timeout time, additional waiters cleanup, use t.Logf
toli-belo 4136dca
Un-export constants
toli-belo dedb12c
Remove unnecessary handler in test
toli-belo 1a4494a
Use multiples of timeoutMs for timing
toli-belo 0510faa
Add test of delayed Get timing, use marginErrorPct constant
toli-belo File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
package client | ||
|
||
import ( | ||
"fmt" | ||
"github.com/stretchr/testify/assert" | ||
"testing" | ||
"time" | ||
) | ||
|
||
const ( | ||
TEST_KEY = "test_key" | ||
) | ||
|
||
func getMsSince(startTime time.Time) int { | ||
return int(time.Now().Sub(startTime).Nanoseconds() / 1e6) | ||
} | ||
|
||
func TestHandlerMapEarlyStoreRetrieve(t *testing.T) { | ||
|
||
handler_map := NewHandlerMap() | ||
var handler ResponseHandler = func(*Response) { | ||
fmt.Printf("test: I got a response \n") | ||
} | ||
handler_map.Put(TEST_KEY, handler) | ||
myHandler, ok := handler_map.Get(TEST_KEY, 20) | ||
if !ok { | ||
t.Error("Failed to get test key") | ||
} | ||
myHandler(nil) | ||
|
||
} | ||
|
||
func TestHandlerMapDelayedPutRetrieve(t *testing.T) { | ||
|
||
handler_map := NewHandlerMap() | ||
startTime := time.Now() | ||
|
||
go func() { | ||
time.Sleep(10 * time.Millisecond) | ||
|
||
// at this point the Get would be waiting for the response. | ||
counts, waiters := handler_map.GetCounts() | ||
assert.Equal(t, 0, counts, "Map Elements") | ||
assert.Equal(t, 1, waiters, "Waiter groups") | ||
|
||
var handler ResponseHandler = func(*Response) { | ||
fmt.Printf("test: I got a response at time %d ms after start\n", getMsSince(startTime)) | ||
} | ||
handler_map.Put(TEST_KEY, handler) | ||
}() | ||
|
||
fmt.Printf("test: Started waiting for key at %d ms after start\n", getMsSince(startTime)) | ||
myHandler, ok := handler_map.Get(TEST_KEY, 20) | ||
if !ok { | ||
t.Error("Failed to get test key") | ||
} | ||
|
||
myHandler(nil) | ||
} | ||
|
||
func TestHandlerMapTimeoutPutTooLate(t *testing.T) { | ||
|
||
handler_map := NewHandlerMap() | ||
startTime := time.Now() | ||
|
||
go func() { | ||
time.Sleep(30 * time.Millisecond) | ||
var handler ResponseHandler = func(*Response) { | ||
fmt.Printf("test: I got a response at time %d ms after start\n", getMsSince(startTime)) | ||
} | ||
handler_map.Put(TEST_KEY, handler) | ||
}() | ||
|
||
fmt.Printf("test: Started waiting for key at %d ms after start\n", getMsSince(startTime)) | ||
_, ok := handler_map.Get(TEST_KEY, 20) | ||
if ok { | ||
t.Error("Should have timed out when getting the key") | ||
return | ||
} else { | ||
// wait till producer has added the element | ||
time.Sleep(20 * time.Millisecond) | ||
counts, waiters := handler_map.GetCounts() | ||
assert.Equal(t, 1, counts, "Map elements") | ||
assert.Equal(t, 0, waiters, "Waiter groups") | ||
} | ||
|
||
} |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
t.Logf