Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
068e70db
Commit
068e70db
authored
Nov 13, 2015
by
k8s-merge-robot
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #17057 from wojtek-t/remove_fake_client_from_contrib
Auto commit by PR queue bot
parents
12ad0b20
578bede3
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
77 additions
and
42 deletions
+77
-42
etcd_master_test.go
contrib/mesos/pkg/election/etcd_master_test.go
+77
-42
No files found.
contrib/mesos/pkg/election/etcd_master_test.go
View file @
068e70db
...
@@ -17,18 +17,24 @@ limitations under the License.
...
@@ -17,18 +17,24 @@ limitations under the License.
package
election
package
election
import
(
import
(
"reflect"
"testing"
"testing"
"github.com/coreos/go-etcd/etcd"
"github.com/coreos/go-etcd/etcd"
etcdtesting
"k8s.io/kubernetes/pkg/storage/etcd/testing"
"k8s.io/kubernetes/pkg/tools"
"k8s.io/kubernetes/pkg/tools"
"k8s.io/kubernetes/pkg/watch"
"k8s.io/kubernetes/pkg/watch"
)
)
func
TestEtcdMasterOther
(
t
*
testing
.
T
)
{
func
TestEtcdMasterOther
(
t
*
testing
.
T
)
{
server
:=
etcdtesting
.
NewEtcdTestClientServer
(
t
)
defer
server
.
Terminate
(
t
)
path
:=
"foo"
path
:=
"foo"
etcd
:=
tools
.
NewFakeEtcdClient
(
t
)
if
_
,
err
:=
server
.
Client
.
Set
(
path
,
"baz"
,
0
);
err
!=
nil
{
etcd
.
Set
(
path
,
"baz"
,
0
)
t
.
Errorf
(
"unexpected error: %v"
,
err
)
master
:=
NewEtcdMasterElector
(
etcd
)
}
master
:=
NewEtcdMasterElector
(
server
.
Client
)
w
:=
master
.
Elect
(
path
,
"bar"
)
w
:=
master
.
Elect
(
path
,
"bar"
)
result
:=
<-
w
.
ResultChan
()
result
:=
<-
w
.
ResultChan
()
if
result
.
Type
!=
watch
.
Modified
||
result
.
Object
.
(
Master
)
!=
"baz"
{
if
result
.
Type
!=
watch
.
Modified
||
result
.
Object
.
(
Master
)
!=
"baz"
{
...
@@ -38,18 +44,11 @@ func TestEtcdMasterOther(t *testing.T) {
...
@@ -38,18 +44,11 @@ func TestEtcdMasterOther(t *testing.T) {
}
}
func
TestEtcdMasterNoOther
(
t
*
testing
.
T
)
{
func
TestEtcdMasterNoOther
(
t
*
testing
.
T
)
{
server
:=
etcdtesting
.
NewEtcdTestClientServer
(
t
)
defer
server
.
Terminate
(
t
)
path
:=
"foo"
path
:=
"foo"
e
:=
tools
.
NewFakeEtcdClient
(
t
)
master
:=
NewEtcdMasterElector
(
server
.
Client
)
e
.
TestIndex
=
true
e
.
Data
[
"foo"
]
=
tools
.
EtcdResponseWithError
{
R
:
&
etcd
.
Response
{
Node
:
nil
,
},
E
:
&
etcd
.
EtcdError
{
ErrorCode
:
tools
.
EtcdErrorCodeNotFound
,
},
}
master
:=
NewEtcdMasterElector
(
e
)
w
:=
master
.
Elect
(
path
,
"bar"
)
w
:=
master
.
Elect
(
path
,
"bar"
)
result
:=
<-
w
.
ResultChan
()
result
:=
<-
w
.
ResultChan
()
if
result
.
Type
!=
watch
.
Modified
||
result
.
Object
.
(
Master
)
!=
"bar"
{
if
result
.
Type
!=
watch
.
Modified
||
result
.
Object
.
(
Master
)
!=
"bar"
{
...
@@ -58,41 +57,77 @@ func TestEtcdMasterNoOther(t *testing.T) {
...
@@ -58,41 +57,77 @@ func TestEtcdMasterNoOther(t *testing.T) {
w
.
Stop
()
w
.
Stop
()
}
}
// MockClient is wrapper aroung tools.EtcdClient.
type
MockClient
struct
{
client
tools
.
EtcdClient
t
*
testing
.
T
// afterGetFunc is called after each Get() call.
afterGetFunc
func
()
calls
[]
string
}
func
(
m
*
MockClient
)
GetCluster
()
[]
string
{
return
m
.
client
.
GetCluster
()
}
func
(
m
*
MockClient
)
Get
(
key
string
,
sort
,
recursive
bool
)
(
*
etcd
.
Response
,
error
)
{
m
.
calls
=
append
(
m
.
calls
,
"get"
)
defer
m
.
afterGetFunc
()
response
,
err
:=
m
.
client
.
Get
(
key
,
sort
,
recursive
)
return
response
,
err
}
func
(
m
*
MockClient
)
Set
(
key
,
value
string
,
ttl
uint64
)
(
*
etcd
.
Response
,
error
)
{
return
m
.
client
.
Set
(
key
,
value
,
ttl
)
}
func
(
m
*
MockClient
)
Create
(
key
,
value
string
,
ttl
uint64
)
(
*
etcd
.
Response
,
error
)
{
m
.
calls
=
append
(
m
.
calls
,
"create"
)
return
m
.
client
.
Create
(
key
,
value
,
ttl
)
}
func
(
m
*
MockClient
)
CompareAndSwap
(
key
,
value
string
,
ttl
uint64
,
prevValue
string
,
prevIndex
uint64
)
(
*
etcd
.
Response
,
error
)
{
return
m
.
client
.
CompareAndSwap
(
key
,
value
,
ttl
,
prevValue
,
prevIndex
)
}
func
(
m
*
MockClient
)
Delete
(
key
string
,
recursive
bool
)
(
*
etcd
.
Response
,
error
)
{
return
m
.
client
.
Delete
(
key
,
recursive
)
}
func
(
m
*
MockClient
)
Watch
(
prefix
string
,
waitIndex
uint64
,
recursive
bool
,
receiver
chan
*
etcd
.
Response
,
stop
chan
bool
)
(
*
etcd
.
Response
,
error
)
{
return
m
.
client
.
Watch
(
prefix
,
waitIndex
,
recursive
,
receiver
,
stop
)
}
func
TestEtcdMasterNoOtherThenConflict
(
t
*
testing
.
T
)
{
func
TestEtcdMasterNoOtherThenConflict
(
t
*
testing
.
T
)
{
server
:=
etcdtesting
.
NewEtcdTestClientServer
(
t
)
defer
server
.
Terminate
(
t
)
// We set up the following scenario:
// - after each Get() call, we write "baz" to a path
// - this is simulating someone else writing a data
// - the value written by someone else is the new value
path
:=
"foo"
path
:=
"foo"
e
:=
tools
.
NewFakeEtcdClient
(
t
)
client
:=
&
MockClient
{
e
.
TestIndex
=
true
client
:
server
.
Client
,
// Ok, so we set up a chain of responses from etcd:
t
:
t
,
// 1) Nothing there
afterGetFunc
:
func
()
{
// 2) conflict (someone else wrote)
if
_
,
err
:=
server
.
Client
.
Set
(
path
,
"baz"
,
0
);
err
!=
nil
{
// 3) new value (the data they wrote)
t
.
Errorf
(
"unexpected error: %v"
,
err
)
empty
:=
tools
.
EtcdResponseWithError
{
}
R
:
&
etcd
.
Response
{
Node
:
nil
,
},
E
:
&
etcd
.
EtcdError
{
ErrorCode
:
tools
.
EtcdErrorCodeNotFound
,
},
}
empty
.
N
=
&
tools
.
EtcdResponseWithError
{
R
:
&
etcd
.
Response
{},
E
:
&
etcd
.
EtcdError
{
ErrorCode
:
tools
.
EtcdErrorCodeNodeExist
,
},
}
empty
.
N
.
N
=
&
tools
.
EtcdResponseWithError
{
R
:
&
etcd
.
Response
{
Node
:
&
etcd
.
Node
{
Value
:
"baz"
,
},
},
},
calls
:
make
([]
string
,
0
),
}
}
e
.
Data
[
"foo"
]
=
empty
master
:=
NewEtcdMasterElector
(
e
)
master
:=
NewEtcdMasterElector
(
client
)
w
:=
master
.
Elect
(
path
,
"bar"
)
w
:=
master
.
Elect
(
path
,
"bar"
)
result
:=
<-
w
.
ResultChan
()
result
:=
<-
w
.
ResultChan
()
if
result
.
Type
!=
watch
.
Modified
||
result
.
Object
.
(
Master
)
!=
"ba
r
"
{
if
result
.
Type
!=
watch
.
Modified
||
result
.
Object
.
(
Master
)
!=
"ba
z
"
{
t
.
Errorf
(
"unexpected event: %#v"
,
result
)
t
.
Errorf
(
"unexpected event: %#v"
,
result
)
}
}
w
.
Stop
()
w
.
Stop
()
expectedCalls
:=
[]
string
{
"get"
,
"create"
,
"get"
}
if
!
reflect
.
DeepEqual
(
client
.
calls
,
expectedCalls
)
{
t
.
Errorf
(
"unexpected calls: %#v"
,
client
.
calls
)
}
}
}
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