You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2023/05/16 13:23:52 UTC
[plc4x] 01/02: test(plc4go/spi): add test for DefaultPlcBrowseRequest
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 2f0c93c49cce6bc7f25886545c049167297428b6
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue May 16 12:40:37 2023 +0200
test(plc4go/spi): add test for DefaultPlcBrowseRequest
---
plc4go/spi/model/DefaultPlcBrowseRequest_test.go | 154 ++++++++++++++++++-----
plc4go/spi/model/mock_PlcBrowser_test.go | 149 ++++++++++++++++++++++
plc4go/spi/model/mock_requirements.go | 5 +
3 files changed, 279 insertions(+), 29 deletions(-)
diff --git a/plc4go/spi/model/DefaultPlcBrowseRequest_test.go b/plc4go/spi/model/DefaultPlcBrowseRequest_test.go
index 880d99fa79..d7a9fe2a55 100644
--- a/plc4go/spi/model/DefaultPlcBrowseRequest_test.go
+++ b/plc4go/spi/model/DefaultPlcBrowseRequest_test.go
@@ -22,6 +22,8 @@ package model
import (
"context"
"fmt"
+ "github.com/pkg/errors"
+ "github.com/stretchr/testify/mock"
"testing"
apiModel "github.com/apache/plc4x/plc4go/pkg/api/model"
@@ -93,15 +95,50 @@ func TestDefaultPlcBrowseRequestBuilder_Build(t *testing.T) {
queryStrings map[string]string
}
tests := []struct {
- name string
- fields fields
- want apiModel.PlcBrowseRequest
- wantErr assert.ErrorAssertionFunc
+ name string
+ fields fields
+ mockSetup func(t *testing.T, fields *fields)
+ want apiModel.PlcBrowseRequest
+ wantErr assert.ErrorAssertionFunc
}{
- // TODO: Add test cases.
+ {
+ name: "build it",
+ want: NewDefaultPlcBrowseRequest(map[string]apiModel.PlcQuery{}, nil, nil),
+ wantErr: assert.NoError,
+ },
+ {
+ name: "build it with queries",
+ fields: fields{
+ queryNames: nil,
+ queryStrings: map[string]string{"a": "a"},
+ },
+ mockSetup: func(t *testing.T, fields *fields) {
+ handler := NewMockPlcTagHandler(t)
+ handler.EXPECT().ParseQuery(mock.Anything).Return(nil, nil)
+ fields.tagHandler = handler
+ },
+ want: NewDefaultPlcBrowseRequest(map[string]apiModel.PlcQuery{"a": nil}, nil, nil),
+ wantErr: assert.NoError,
+ },
+ {
+ name: "build it parse error",
+ fields: fields{
+ queryNames: nil,
+ queryStrings: map[string]string{"a": "a"},
+ },
+ mockSetup: func(t *testing.T, fields *fields) {
+ handler := NewMockPlcTagHandler(t)
+ handler.EXPECT().ParseQuery(mock.Anything).Return(nil, errors.New("nope"))
+ fields.tagHandler = handler
+ },
+ wantErr: assert.Error,
+ },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
+ if tt.mockSetup != nil {
+ tt.mockSetup(t, &tt.fields)
+ }
d := &DefaultPlcBrowseRequestBuilder{
tagHandler: tt.fields.tagHandler,
browser: tt.fields.browser,
@@ -124,14 +161,25 @@ func TestDefaultPlcBrowseRequest_Execute(t *testing.T) {
queries map[string]apiModel.PlcQuery
}
tests := []struct {
- name string
- fields fields
- want <-chan apiModel.PlcBrowseRequestResult
+ name string
+ fields fields
+ mockSetup func(t *testing.T, fields *fields)
+ want <-chan apiModel.PlcBrowseRequestResult
}{
- // TODO: Add test cases.
+ {
+ name: "execute it",
+ mockSetup: func(t *testing.T, fields *fields) {
+ browser := NewMockPlcBrowser(t)
+ browser.EXPECT().Browse(mock.Anything, mock.Anything).Return(nil)
+ fields.browser = browser
+ },
+ },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
+ if tt.mockSetup != nil {
+ tt.mockSetup(t, &tt.fields)
+ }
d := &DefaultPlcBrowseRequest{
browser: tt.fields.browser,
queryNames: tt.fields.queryNames,
@@ -152,15 +200,26 @@ func TestDefaultPlcBrowseRequest_ExecuteWithContext(t *testing.T) {
ctx context.Context
}
tests := []struct {
- name string
- fields fields
- args args
- want <-chan apiModel.PlcBrowseRequestResult
+ name string
+ fields fields
+ args args
+ mockSetup func(t *testing.T, fields *fields)
+ want <-chan apiModel.PlcBrowseRequestResult
}{
- // TODO: Add test cases.
+ {
+ name: "execute it",
+ mockSetup: func(t *testing.T, fields *fields) {
+ browser := NewMockPlcBrowser(t)
+ browser.EXPECT().Browse(mock.Anything, mock.Anything).Return(nil)
+ fields.browser = browser
+ },
+ },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
+ if tt.mockSetup != nil {
+ tt.mockSetup(t, &tt.fields)
+ }
d := &DefaultPlcBrowseRequest{
browser: tt.fields.browser,
queryNames: tt.fields.queryNames,
@@ -181,15 +240,26 @@ func TestDefaultPlcBrowseRequest_ExecuteWithInterceptor(t *testing.T) {
interceptor func(result apiModel.PlcBrowseItem) bool
}
tests := []struct {
- name string
- fields fields
- args args
- want <-chan apiModel.PlcBrowseRequestResult
+ name string
+ fields fields
+ args args
+ mockSetup func(t *testing.T, fields *fields)
+ want <-chan apiModel.PlcBrowseRequestResult
}{
- // TODO: Add test cases.
+ {
+ name: "execute it",
+ mockSetup: func(t *testing.T, fields *fields) {
+ browser := NewMockPlcBrowser(t)
+ browser.EXPECT().BrowseWithInterceptor(mock.Anything, mock.Anything, mock.Anything).Return(nil)
+ fields.browser = browser
+ },
+ },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
+ if tt.mockSetup != nil {
+ tt.mockSetup(t, &tt.fields)
+ }
d := &DefaultPlcBrowseRequest{
browser: tt.fields.browser,
queryNames: tt.fields.queryNames,
@@ -211,15 +281,26 @@ func TestDefaultPlcBrowseRequest_ExecuteWithInterceptorWithContext(t *testing.T)
interceptor func(result apiModel.PlcBrowseItem) bool
}
tests := []struct {
- name string
- fields fields
- args args
- want <-chan apiModel.PlcBrowseRequestResult
+ name string
+ fields fields
+ args args
+ mockSetup func(t *testing.T, fields *fields)
+ want <-chan apiModel.PlcBrowseRequestResult
}{
- // TODO: Add test cases.
+ {
+ name: "execute it",
+ mockSetup: func(t *testing.T, fields *fields) {
+ browser := NewMockPlcBrowser(t)
+ browser.EXPECT().BrowseWithInterceptor(mock.Anything, mock.Anything, mock.Anything).Return(nil)
+ fields.browser = browser
+ },
+ },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
+ if tt.mockSetup != nil {
+ tt.mockSetup(t, &tt.fields)
+ }
d := &DefaultPlcBrowseRequest{
browser: tt.fields.browser,
queryNames: tt.fields.queryNames,
@@ -245,7 +326,9 @@ func TestDefaultPlcBrowseRequest_GetQuery(t *testing.T) {
args args
want apiModel.PlcQuery
}{
- // TODO: Add test cases.
+ {
+ name: "get it",
+ },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
@@ -270,7 +353,9 @@ func TestDefaultPlcBrowseRequest_GetQueryNames(t *testing.T) {
fields fields
want []string
}{
- // TODO: Add test cases.
+ {
+ name: "get it",
+ },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
@@ -295,7 +380,10 @@ func TestDefaultPlcBrowseRequest_IsAPlcMessage(t *testing.T) {
fields fields
want bool
}{
- // TODO: Add test cases.
+ {
+ name: "is it",
+ want: true,
+ },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
@@ -320,7 +408,10 @@ func TestNewDefaultPlcBrowseRequest(t *testing.T) {
args args
want *DefaultPlcBrowseRequest
}{
- // TODO: Add test cases.
+ {
+ name: "browse it",
+ want: &DefaultPlcBrowseRequest{},
+ },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
@@ -339,7 +430,12 @@ func TestNewDefaultPlcBrowseRequestBuilder(t *testing.T) {
args args
want apiModel.PlcBrowseRequestBuilder
}{
- // TODO: Add test cases.
+ {
+ name: "get it",
+ want: &DefaultPlcBrowseRequestBuilder{
+ queryStrings: map[string]string{},
+ },
+ },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
diff --git a/plc4go/spi/model/mock_PlcBrowser_test.go b/plc4go/spi/model/mock_PlcBrowser_test.go
new file mode 100644
index 0000000000..dc62e6e940
--- /dev/null
+++ b/plc4go/spi/model/mock_PlcBrowser_test.go
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// Code generated by mockery v2.27.1. DO NOT EDIT.
+
+package model
+
+import (
+ context "context"
+
+ apimodel "github.com/apache/plc4x/plc4go/pkg/api/model"
+
+ mock "github.com/stretchr/testify/mock"
+)
+
+// MockPlcBrowser is an autogenerated mock type for the PlcBrowser type
+type MockPlcBrowser struct {
+ mock.Mock
+}
+
+type MockPlcBrowser_Expecter struct {
+ mock *mock.Mock
+}
+
+func (_m *MockPlcBrowser) EXPECT() *MockPlcBrowser_Expecter {
+ return &MockPlcBrowser_Expecter{mock: &_m.Mock}
+}
+
+// Browse provides a mock function with given fields: ctx, browseRequest
+func (_m *MockPlcBrowser) Browse(ctx context.Context, browseRequest apimodel.PlcBrowseRequest) <-chan apimodel.PlcBrowseRequestResult {
+ ret := _m.Called(ctx, browseRequest)
+
+ var r0 <-chan apimodel.PlcBrowseRequestResult
+ if rf, ok := ret.Get(0).(func(context.Context, apimodel.PlcBrowseRequest) <-chan apimodel.PlcBrowseRequestResult); ok {
+ r0 = rf(ctx, browseRequest)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(<-chan apimodel.PlcBrowseRequestResult)
+ }
+ }
+
+ return r0
+}
+
+// MockPlcBrowser_Browse_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Browse'
+type MockPlcBrowser_Browse_Call struct {
+ *mock.Call
+}
+
+// Browse is a helper method to define mock.On call
+// - ctx context.Context
+// - browseRequest apimodel.PlcBrowseRequest
+func (_e *MockPlcBrowser_Expecter) Browse(ctx interface{}, browseRequest interface{}) *MockPlcBrowser_Browse_Call {
+ return &MockPlcBrowser_Browse_Call{Call: _e.mock.On("Browse", ctx, browseRequest)}
+}
+
+func (_c *MockPlcBrowser_Browse_Call) Run(run func(ctx context.Context, browseRequest apimodel.PlcBrowseRequest)) *MockPlcBrowser_Browse_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(apimodel.PlcBrowseRequest))
+ })
+ return _c
+}
+
+func (_c *MockPlcBrowser_Browse_Call) Return(_a0 <-chan apimodel.PlcBrowseRequestResult) *MockPlcBrowser_Browse_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockPlcBrowser_Browse_Call) RunAndReturn(run func(context.Context, apimodel.PlcBrowseRequest) <-chan apimodel.PlcBrowseRequestResult) *MockPlcBrowser_Browse_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// BrowseWithInterceptor provides a mock function with given fields: ctx, browseRequest, interceptor
+func (_m *MockPlcBrowser) BrowseWithInterceptor(ctx context.Context, browseRequest apimodel.PlcBrowseRequest, interceptor func(apimodel.PlcBrowseItem) bool) <-chan apimodel.PlcBrowseRequestResult {
+ ret := _m.Called(ctx, browseRequest, interceptor)
+
+ var r0 <-chan apimodel.PlcBrowseRequestResult
+ if rf, ok := ret.Get(0).(func(context.Context, apimodel.PlcBrowseRequest, func(apimodel.PlcBrowseItem) bool) <-chan apimodel.PlcBrowseRequestResult); ok {
+ r0 = rf(ctx, browseRequest, interceptor)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(<-chan apimodel.PlcBrowseRequestResult)
+ }
+ }
+
+ return r0
+}
+
+// MockPlcBrowser_BrowseWithInterceptor_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BrowseWithInterceptor'
+type MockPlcBrowser_BrowseWithInterceptor_Call struct {
+ *mock.Call
+}
+
+// BrowseWithInterceptor is a helper method to define mock.On call
+// - ctx context.Context
+// - browseRequest apimodel.PlcBrowseRequest
+// - interceptor func(apimodel.PlcBrowseItem) bool
+func (_e *MockPlcBrowser_Expecter) BrowseWithInterceptor(ctx interface{}, browseRequest interface{}, interceptor interface{}) *MockPlcBrowser_BrowseWithInterceptor_Call {
+ return &MockPlcBrowser_BrowseWithInterceptor_Call{Call: _e.mock.On("BrowseWithInterceptor", ctx, browseRequest, interceptor)}
+}
+
+func (_c *MockPlcBrowser_BrowseWithInterceptor_Call) Run(run func(ctx context.Context, browseRequest apimodel.PlcBrowseRequest, interceptor func(apimodel.PlcBrowseItem) bool)) *MockPlcBrowser_BrowseWithInterceptor_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(apimodel.PlcBrowseRequest), args[2].(func(apimodel.PlcBrowseItem) bool))
+ })
+ return _c
+}
+
+func (_c *MockPlcBrowser_BrowseWithInterceptor_Call) Return(_a0 <-chan apimodel.PlcBrowseRequestResult) *MockPlcBrowser_BrowseWithInterceptor_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockPlcBrowser_BrowseWithInterceptor_Call) RunAndReturn(run func(context.Context, apimodel.PlcBrowseRequest, func(apimodel.PlcBrowseItem) bool) <-chan apimodel.PlcBrowseRequestResult) *MockPlcBrowser_BrowseWithInterceptor_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+type mockConstructorTestingTNewMockPlcBrowser interface {
+ mock.TestingT
+ Cleanup(func())
+}
+
+// NewMockPlcBrowser creates a new instance of MockPlcBrowser. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+func NewMockPlcBrowser(t mockConstructorTestingTNewMockPlcBrowser) *MockPlcBrowser {
+ mock := &MockPlcBrowser{}
+ mock.Mock.Test(t)
+
+ t.Cleanup(func() { mock.AssertExpectations(t) })
+
+ return mock
+}
diff --git a/plc4go/spi/model/mock_requirements.go b/plc4go/spi/model/mock_requirements.go
index 0adb840f1e..64f4f31497 100644
--- a/plc4go/spi/model/mock_requirements.go
+++ b/plc4go/spi/model/mock_requirements.go
@@ -26,6 +26,11 @@ import (
// Note this file is a Helper for mockery to generate use mocks from other package
+// Deprecated: don't use it in productive code
+type PlcBrowser interface {
+ spi.PlcBrowser
+}
+
// Deprecated: don't use it in productive code
type PlcTagHandler interface {
spi.PlcTagHandler