Skip to content

Commit 09bdd94

Browse files
authored
Merge pull request #54 from lpabon/mock-clean
Minimize mock driver code
2 parents 54c9bde + bd562a0 commit 09bdd94

20 files changed

+187
-2843
lines changed

Gopkg.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

driver/driver.go

Lines changed: 42 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -23,118 +23,95 @@ import (
2323
"sync"
2424

2525
csi "github.com/container-storage-interface/spec/lib/go/csi/v0"
26-
"github.com/kubernetes-csi/csi-test/utils"
2726
"google.golang.org/grpc"
2827
"google.golang.org/grpc/reflection"
2928
)
3029

31-
type MockCSIDriverServers struct {
32-
Controller *MockControllerServer
33-
Identity *MockIdentityServer
34-
Node *MockNodeServer
30+
type CSIDriverServers struct {
31+
Controller csi.ControllerServer
32+
Identity csi.IdentityServer
33+
Node csi.NodeServer
3534
}
3635

37-
type MockCSIDriver struct {
36+
type CSIDriver struct {
3837
listener net.Listener
3938
server *grpc.Server
40-
conn *grpc.ClientConn
41-
servers *MockCSIDriverServers
39+
servers *CSIDriverServers
4240
wg sync.WaitGroup
4341
running bool
4442
lock sync.Mutex
4543
}
4644

47-
func NewMockCSIDriver(servers *MockCSIDriverServers) *MockCSIDriver {
48-
return &MockCSIDriver{
45+
func NewCSIDriver(servers *CSIDriverServers) *CSIDriver {
46+
return &CSIDriver{
4947
servers: servers,
5048
}
5149
}
5250

53-
func (m *MockCSIDriver) goServe(started chan<- bool) {
54-
m.wg.Add(1)
51+
func (c *CSIDriver) goServe(started chan<- bool) {
52+
c.wg.Add(1)
5553
go func() {
56-
defer m.wg.Done()
54+
defer c.wg.Done()
5755
started <- true
58-
err := m.server.Serve(m.listener)
56+
err := c.server.Serve(c.listener)
5957
if err != nil {
6058
panic(err.Error())
6159
}
6260
}()
6361
}
6462

65-
func (m *MockCSIDriver) Address() string {
66-
return m.listener.Addr().String()
63+
func (c *CSIDriver) Address() string {
64+
return c.listener.Addr().String()
6765
}
68-
func (m *MockCSIDriver) Start() error {
69-
m.lock.Lock()
70-
defer m.lock.Unlock()
71-
72-
// Listen on a port assigned by the net package
73-
l, err := net.Listen("tcp", "127.0.0.1:0")
74-
if err != nil {
75-
return err
76-
}
77-
m.listener = l
66+
func (c *CSIDriver) Start(l net.Listener) error {
67+
c.lock.Lock()
68+
defer c.lock.Unlock()
69+
70+
// Set listener
71+
c.listener = l
7872

7973
// Create a new grpc server
80-
m.server = grpc.NewServer()
74+
c.server = grpc.NewServer()
8175

8276
// Register Mock servers
83-
if m.servers.Controller != nil {
84-
csi.RegisterControllerServer(m.server, m.servers.Controller)
77+
if c.servers.Controller != nil {
78+
csi.RegisterControllerServer(c.server, c.servers.Controller)
8579
}
86-
if m.servers.Identity != nil {
87-
csi.RegisterIdentityServer(m.server, m.servers.Identity)
80+
if c.servers.Identity != nil {
81+
csi.RegisterIdentityServer(c.server, c.servers.Identity)
8882
}
89-
if m.servers.Node != nil {
90-
csi.RegisterNodeServer(m.server, m.servers.Node)
83+
if c.servers.Node != nil {
84+
csi.RegisterNodeServer(c.server, c.servers.Node)
9185
}
92-
reflection.Register(m.server)
86+
reflection.Register(c.server)
9387

9488
// Start listening for requests
9589
waitForServer := make(chan bool)
96-
m.goServe(waitForServer)
90+
c.goServe(waitForServer)
9791
<-waitForServer
98-
m.running = true
92+
c.running = true
9993
return nil
10094
}
10195

102-
func (m *MockCSIDriver) Nexus() (*grpc.ClientConn, error) {
103-
// Start server
104-
err := m.Start()
105-
if err != nil {
106-
return nil, err
107-
}
108-
109-
// Create a client connection
110-
m.conn, err = utils.Connect(m.Address())
111-
if err != nil {
112-
return nil, err
113-
}
114-
115-
return m.conn, nil
116-
}
117-
118-
func (m *MockCSIDriver) Stop() {
119-
m.lock.Lock()
120-
defer m.lock.Unlock()
96+
func (c *CSIDriver) Stop() {
97+
c.lock.Lock()
98+
defer c.lock.Unlock()
12199

122-
if !m.running {
100+
if !c.running {
123101
return
124102
}
125103

126-
m.server.Stop()
127-
m.wg.Wait()
104+
c.server.Stop()
105+
c.wg.Wait()
128106
}
129107

130-
func (m *MockCSIDriver) Close() {
131-
m.conn.Close()
132-
m.server.Stop()
108+
func (c *CSIDriver) Close() {
109+
c.server.Stop()
133110
}
134111

135-
func (m *MockCSIDriver) IsRunning() bool {
136-
m.lock.Lock()
137-
defer m.lock.Unlock()
112+
func (c *CSIDriver) IsRunning() bool {
113+
c.lock.Lock()
114+
defer c.lock.Unlock()
138115

139-
return m.running
116+
return c.running
140117
}

driver/mock.go

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*
2+
Copyright 2017 Luis Pabón [email protected]
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package driver
18+
19+
import (
20+
"net"
21+
22+
"github.com/kubernetes-csi/csi-test/utils"
23+
"google.golang.org/grpc"
24+
)
25+
26+
type MockCSIDriverServers struct {
27+
Controller *MockControllerServer
28+
Identity *MockIdentityServer
29+
Node *MockNodeServer
30+
}
31+
32+
type MockCSIDriver struct {
33+
CSIDriver
34+
conn *grpc.ClientConn
35+
}
36+
37+
func NewMockCSIDriver(servers *MockCSIDriverServers) *MockCSIDriver {
38+
return &MockCSIDriver{
39+
CSIDriver: CSIDriver{
40+
servers: &CSIDriverServers{
41+
Controller: servers.Controller,
42+
Node: servers.Node,
43+
Identity: servers.Identity,
44+
},
45+
},
46+
}
47+
}
48+
49+
func (m *MockCSIDriver) Start() error {
50+
// Listen on a port assigned by the net package
51+
l, err := net.Listen("tcp", "127.0.0.1:0")
52+
if err != nil {
53+
return err
54+
}
55+
56+
if err := m.CSIDriver.Start(l); err != nil {
57+
l.Close()
58+
return err
59+
}
60+
61+
return nil
62+
}
63+
64+
func (m *MockCSIDriver) Nexus() (*grpc.ClientConn, error) {
65+
// Start server
66+
err := m.Start()
67+
if err != nil {
68+
return nil, err
69+
}
70+
71+
// Create a client connection
72+
m.conn, err = utils.Connect(m.Address())
73+
if err != nil {
74+
return nil, err
75+
}
76+
77+
return m.conn, nil
78+
}
79+
80+
func (m *MockCSIDriver) Close() {
81+
m.conn.Close()
82+
m.server.Stop()
83+
}

hack/e2e.sh

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
TESTARGS=$@
44
UDS="/tmp/e2e-csi-sanity.sock"
5-
CSI_ENDPOINTS="127.0.0.1:9998"
6-
CSI_ENDPOINTS="$CSI_ENDPOINTS unix://${UDS}"
75
CSI_ENDPOINTS="$CSI_ENDPOINTS ${UDS}"
86
CSI_MOCK_VERSION="master"
97

@@ -24,18 +22,12 @@ runTest()
2422
fi
2523
}
2624

27-
cd mock
28-
make clean mock || exit 1
29-
cd ..
25+
go install ./mock || exit 1
3026

3127
cd cmd/csi-sanity
3228
make clean install || exit 1
3329
cd ../..
3430

35-
runTest "tcp://127.0.0.1:9998" "127.0.0.1:9998"
36-
rm -f $UDS
37-
runTest "unix://${UDS}" "unix://${UDS}"
38-
rm -f $UDS
3931
runTest "${UDS}" "${UDS}"
4032
rm -f $UDS
4133

mock/.gitignore

Lines changed: 0 additions & 1 deletion
This file was deleted.

mock/AUTHORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
TheCodeTeam
2+
Kubernetes Authors

mock/Makefile

Lines changed: 0 additions & 17 deletions
This file was deleted.

mock/README.md

Lines changed: 2 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,2 @@
1-
# Mock Plug-in
2-
The mock plug-in is a stand-alone binary that implements the CSI
3-
Controller, Identity, and Node RPCs in addition to the specification's
4-
requirements regarding idempotency.
5-
6-
The mock plug-in always starts with a deterministic state and maintains
7-
state for the duration of the process. The state can also be modified.
8-
For example, while the plug-in launches with three volumes, a
9-
`CreateVolume` RPC will update the plug-in's internal data map so that a
10-
subsequent `ListVolumes` RPC will indicate four volumes are present.
11-
12-
Per the specification the Mock plug-in starts a gRPC server using the
13-
value of the environment variable `CSI_ENDPOINT`. The plug-in process
14-
runs in the foreground, logging activity to `STDOUT` and errors to
15-
`STDERR`, only returning control to the user when `CTRL-C` is entered
16-
or the process is sent a `kill` signal.
17-
18-
```bash
19-
$ CSI_ENDPOINT=/tmp/csi.sock mock/mock
20-
INFO 2017/08/22 16:22:15 main.go:154: mock.Serve: /tmp/csi.sock
21-
INFO 2017/08/22 16:22:18 main.go:133: /csi.Controller/CreateVolume: REQ 0001: Version=minor:1 , Name=Test Volume, CapacityRange=required_bytes:10740000000 limit_bytes:107400000000 , VolumeCapabilities=[mount:<fs_type:"ext4" mount_flags:"-o noexec" > ], Parameters=map[tag:gold]
22-
INFO 2017/08/22 16:22:18 main.go:133: /csi.Controller/CreateVolume: REP 0001: Reply=&{volume_info:<capacity_bytes:107400000000 id:<values:<key:"id" value:"4" > values:<key:"name" value:"Test Volume" > > metadata:<> > }
23-
INFO 2017/08/22 16:23:53 main.go:94: received signal: interrupt: shutting down
24-
INFO 2017/08/22 16:23:53 main.go:188: mock.GracefulStop
25-
INFO 2017/08/22 16:23:53 main.go:53: removed sock file: /tmp/csi.sock
26-
INFO 2017/08/22 16:23:53 main.go:64: server stopped gracefully
27-
```
28-
29-
## Configuration
30-
The Mock CSI plug-in is created using the GoCSI CSP package. Please
31-
see its [configuration section](../csp/README.md#configuration) for
32-
a complete list of the environment variables that may be used to
33-
configure the Mock SP.
34-
35-
The following table is a list of the Mock SP's default configuration
36-
values:
37-
38-
| Name | Value |
39-
|------|---------|
40-
| `X_CSI_IDEMP` | `true` |
41-
| `X_CSI_IDEMP_REQUIRE_VOL` | `true` |
42-
| `X_CSI_REQUIRE_NODE_ID` | `true` |
43-
| `X_CSI_REQUIRE_PUB_VOL_INFO` | `true` |
44-
| `X_CSI_CREATE_VOL_ALREADY_EXISTS` | `true` |
45-
| `X_CSI_DELETE_VOL_NOT_FOUND` | `true` |
46-
| `X_CSI_SUPPORTED_VERSIONS` | `0.2.0 1.0.0 1.1.0` |
1+
# Mock CSI Driver
2+
Extremely simple mock driver used to test `csi-sanity` based on `rexray/gocsi/mock`

0 commit comments

Comments
 (0)