Skip to content
This repository has been archived by the owner on Jan 20, 2023. It is now read-only.

Commit

Permalink
Remove Storage struct from brokers
Browse files Browse the repository at this point in the history
Signed-off-by: Angel Misevski <amisevsk@redhat.com>
  • Loading branch information
amisevsk committed Feb 14, 2020
1 parent 4e797e0 commit 42d418a
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 297 deletions.
18 changes: 2 additions & 16 deletions brokers/metadata/broker.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import (
jsonrpc "github.com/eclipse/che-go-jsonrpc"
"github.com/eclipse/che-plugin-broker/common"
"github.com/eclipse/che-plugin-broker/model"
"github.com/eclipse/che-plugin-broker/storage"
"github.com/eclipse/che-plugin-broker/utils"
)

Expand All @@ -31,7 +30,6 @@ const RegistryURLFormat = "%s/%s/meta.yaml"
// Broker is used to process Che plugins
type Broker struct {
common.Broker
Storage storage.Storage
ioUtils utils.IoUtil
rand common.Random
localhostSidecar bool
Expand All @@ -41,7 +39,6 @@ type Broker struct {
func NewBroker(localhostSidecar bool) *Broker {
return &Broker{
Broker: common.NewBroker(),
Storage: storage.New(),
ioUtils: utils.New(),
rand: common.NewRand(),
localhostSidecar: localhostSidecar,
Expand Down Expand Up @@ -77,15 +74,9 @@ func (b *Broker) Start(pluginFQNs []model.PluginFQN, defaultRegistry string) err
if err != nil {
return b.fail(err)
}
for _, plugin := range plugins {
err = b.Storage.AddPlugin(plugin)
if err != nil {
return b.fail(err)
}
}

// Serialize ChePlugins and return to Che server
result, err := b.serializeTooling()
result, err := b.serializeTooling(plugins)
if err != nil {
return b.fail(err)
}
Expand Down Expand Up @@ -125,7 +116,6 @@ func (b *Broker) ProcessPlugins(metas []model.PluginMeta) ([]model.ChePlugin, er
// variables and volumes potentially required by plugins for running the remote Theia
// runtime (see: GetRuntimeInjection)
func (b *Broker) ProcessPlugin(meta model.PluginMeta, remoteInjection *RemotePluginInjection) model.ChePlugin {

if utils.IsTheiaOrVscodePlugin(meta) && len(meta.Spec.Containers) > 0 {
AddPluginRunnerRequirements(meta, b.rand, b.localhostSidecar)
InjectRemoteRuntime(&meta, remoteInjection)
Expand All @@ -150,11 +140,7 @@ func ConvertMetaToPlugin(meta model.PluginMeta) model.ChePlugin {
}
}

func (b *Broker) serializeTooling() (string, error) {
plugins, err := b.Storage.Plugins()
if err != nil {
return "", err
}
func (b *Broker) serializeTooling(plugins []model.ChePlugin) (string, error) {
pluginsBytes, err := json.Marshal(plugins)
if err != nil {
return "", err
Expand Down
89 changes: 34 additions & 55 deletions brokers/metadata/broker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import (

commonMock "github.com/eclipse/che-plugin-broker/common/mocks"
"github.com/eclipse/che-plugin-broker/model"
storageMock "github.com/eclipse/che-plugin-broker/storage/mocks"
utilMock "github.com/eclipse/che-plugin-broker/utils/mocks"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
Expand All @@ -31,15 +30,13 @@ import (
type mocks struct {
commonBroker *commonMock.Broker
ioUtils *utilMock.IoUtil
storage *storageMock.Storage
rand *commonMock.Random
broker *Broker
}

func initMocks() *mocks {
commonBroker := &commonMock.Broker{}
ioUtils := &utilMock.IoUtil{}
storage := &storageMock.Storage{}
rand := &commonMock.Random{}

commonBroker.On("PrintInfo", mock.AnythingOfType("string"))
Expand All @@ -54,11 +51,9 @@ func initMocks() *mocks {
return &mocks{
commonBroker: commonBroker,
ioUtils: ioUtils,
storage: storage,
rand: rand,
broker: &Broker{
Broker: commonBroker,
Storage: storage,
ioUtils: ioUtils,
rand: rand,
localhostSidecar: false,
Expand Down Expand Up @@ -104,8 +99,6 @@ spec:
`
m := initMocks()
m.ioUtils.On("Fetch", mock.AnythingOfType("string")).Return([]byte(pluginMetaContent), nil)
m.storage.On("AddPlugin", mock.AnythingOfType("model.ChePlugin")).Return(nil)
m.storage.On("Plugins").Return([]model.ChePlugin{}, nil)

err := m.broker.Start([]model.PluginFQN{pluginFQNWithoutRegistry}, "http://defaultRegistry.com")

Expand All @@ -124,7 +117,7 @@ func TestBroker_ProcessPluginsValidatesPlugins(t *testing.T) {
},
}
m := initMocks()
err := m.broker.ProcessPlugins(metas)
_, err := m.broker.ProcessPlugins(metas)

assert.Error(t, err)
assert.Regexp(t, regexp.MustCompile("Plugin .* is invalid."), err)
Expand All @@ -134,7 +127,7 @@ func TestBroker_ProcessPluginsGetsRuntimeInjection(t *testing.T) {
theiaMeta := loadPluginMetaFromFile(t, "theia-invalid-injection.yaml")
metas := []model.PluginMeta{*theiaMeta}
m := initMocks()
err := m.broker.ProcessPlugins(metas)
_, err := m.broker.ProcessPlugins(metas)

assert.Error(t, err)
assert.Regexp(t, regexp.MustCompile("Unable to find"), err)
Expand All @@ -146,12 +139,11 @@ func TestBroker_ProcessPluginsProcessesAllPlugins(t *testing.T) {
metas := []model.PluginMeta{*theiaMeta, *machineExecMeta}

m := initMocks()
m.storage.On("AddPlugin", mock.AnythingOfType("model.ChePlugin")).Return(nil)
err := m.broker.ProcessPlugins(metas)
plugins, err := m.broker.ProcessPlugins(metas)

assert.Nil(t, err)
m.storage.AssertExpectations(t)
m.storage.AssertNumberOfCalls(t, "AddPlugin", 2)
assert.Equal(t, len(plugins), 2)
assertListContainsPluginID(t, plugins, theiaMeta.ID)
}

// TestBroker_ProcessPluginAddsPluginRunnerRequirementsForVsCodePlugin is a high-level
Expand All @@ -165,21 +157,17 @@ func TestBroker_ProcessPluginAddsPluginRunnerRequirementsForVsCodePlugin(t *test
m.rand.On("String", 10).Return("randomString1234567890")
m.rand.On("String", 6).Return("randomString123456")

m.storage.On("AddPlugin", mock.MatchedBy(func(plugin model.ChePlugin) bool {
volumes := plugin.Containers[0].Volumes
for _, volume := range volumes {
plugin := m.broker.ProcessPlugin(*javaMeta, nil)

assert.NotNil(t, plugin)
assert.Conditionf(t, func() (success bool) {
for _, volume := range plugin.Containers[0].Volumes {
if volume.Name == "plugins" {
return true
}
}
return false
})).Return(nil)

err := m.broker.ProcessPlugin(*javaMeta, nil)

assert.Nil(t, err)
m.storage.AssertExpectations(t)
m.storage.AssertNumberOfCalls(t, "AddPlugin", 1)
}, "AddPlugin should add plugin runner requirements for plugin runner")
}

// TestBroker_ProcessPluginDoesNotAddRunnerRequirementsForChePluginType is a high-level
Expand All @@ -193,13 +181,9 @@ func TestBroker_ProcessPluginDoesNotAddRunnerRequirementsForChePluginType(t *tes
m.rand.On("String", 10).Return("randomString1234567890")
m.rand.On("String", 6).Return("randomString123456")

m.storage.On("AddPlugin", ConvertMetaToPlugin(*machineExecMeta)).Return(nil)

err := m.broker.ProcessPlugin(*machineExecMeta, nil)
plugin := m.broker.ProcessPlugin(*machineExecMeta, nil)

assert.Nil(t, err)
m.storage.AssertExpectations(t)
m.storage.AssertNumberOfCalls(t, "AddPlugin", 1)
assert.Equal(t, plugin, ConvertMetaToPlugin(*machineExecMeta))
}

// TestBroker_ProcessPluginDoesNotAddRunnerRequirementsForVsCodePluginWithNoContainers is a high-level
Expand All @@ -214,13 +198,9 @@ func TestBroker_ProcessPluginDoesNotAddRunnerRequirementsForVsCodePluginWithNoCo
m.rand.On("String", 10).Return("randomString1234567890")
m.rand.On("String", 6).Return("randomString123456")

m.storage.On("AddPlugin", ConvertMetaToPlugin(*noContainerMeta)).Return(nil)

err := m.broker.ProcessPlugin(*noContainerMeta, nil)
plugin := m.broker.ProcessPlugin(*noContainerMeta, nil)

assert.Nil(t, err)
m.storage.AssertExpectations(t)
m.storage.AssertNumberOfCalls(t, "AddPlugin", 1)
assert.Equal(t, plugin, ConvertMetaToPlugin(*noContainerMeta))
}

// TestBroker_ProcessPluginsInjectsRemoteRuntimeForVsCodePlugins is a high-level
Expand All @@ -243,7 +223,9 @@ func TestBroker_ProcessPluginsInjectsRemoteRuntimeForVsCodePlugins(t *testing.T)
m.rand.On("String", 10).Return("randomString1234567890")
m.rand.On("String", 6).Return("randomString123456")

m.storage.On("AddPlugin", mock.MatchedBy(func(plugin model.ChePlugin) bool {
plugin := m.broker.ProcessPlugin(*javaMeta, injection)

assert.Conditionf(t, func() (success bool) {
hasVolume := false
hasEnvVar := false
for _, volume := range plugin.Containers[0].Volumes {
Expand All @@ -257,13 +239,7 @@ func TestBroker_ProcessPluginsInjectsRemoteRuntimeForVsCodePlugins(t *testing.T)
}
}
return hasVolume && hasEnvVar
})).Return(nil)

err := m.broker.ProcessPlugin(*javaMeta, injection)

assert.Nil(t, err)
m.storage.AssertExpectations(t)
m.storage.AssertNumberOfCalls(t, "AddPlugin", 1)
}, "Plugin should have remote runtime injected")
}

// TestBroker_ProcessPluginDoesNotInjectRuntimeForChePluginType is a high-level
Expand All @@ -285,13 +261,9 @@ func TestBroker_ProcessPluginDoesNotInjectRuntimeForChePluginType(t *testing.T)
m.rand.On("String", 10).Return("randomString1234567890")
m.rand.On("String", 6).Return("randomString123456")

m.storage.On("AddPlugin", ConvertMetaToPlugin(*machineExecMeta)).Return(nil)

err := m.broker.ProcessPlugin(*machineExecMeta, injection)
plugin := m.broker.ProcessPlugin(*machineExecMeta, injection)

assert.Nil(t, err)
m.storage.AssertExpectations(t)
m.storage.AssertNumberOfCalls(t, "AddPlugin", 1)
assert.Equal(t, plugin, ConvertMetaToPlugin(*machineExecMeta))
}

// TestBroker_ProcessPluginDoesNotAddRunnerRequirementsForVsCodePluginWithNoContainers is a high-level
Expand All @@ -313,13 +285,9 @@ func TestBroker_ProcessPluginDoesNotInjectRuntimeForVsCodePluginWithNoContainers
m.rand.On("String", 10).Return("randomString1234567890")
m.rand.On("String", 6).Return("randomString123456")

m.storage.On("AddPlugin", ConvertMetaToPlugin(*noContainerMeta)).Return(nil)

err := m.broker.ProcessPlugin(*noContainerMeta, injection)
plugin := m.broker.ProcessPlugin(*noContainerMeta, injection)

assert.Nil(t, err)
m.storage.AssertExpectations(t)
m.storage.AssertNumberOfCalls(t, "AddPlugin", 1)
assert.Equal(t, plugin, ConvertMetaToPlugin(*noContainerMeta))
}

func loadPluginMetaFromFile(t *testing.T, filename string) *model.PluginMeta {
Expand All @@ -335,6 +303,17 @@ func loadPluginMetaFromFile(t *testing.T, filename string) *model.PluginMeta {
return &pluginMeta
}

func assertListContainsPluginID(t *testing.T, plugins []model.ChePlugin, id string) {
found := false
for _, plugin := range plugins {
if plugin.ID == id {
found = true
break
}
}
assert.True(t, found, "Expected to find plugin with id %s in list of plugins, but list is\n%v", plugins)
}

var pluginFQNWithoutRegistry = model.PluginFQN{
ID: "test-no-registry/1.0",
}
48 changes: 0 additions & 48 deletions storage/mocks/Storage.go

This file was deleted.

52 changes: 0 additions & 52 deletions storage/storage.go

This file was deleted.

Loading

0 comments on commit 42d418a

Please sign in to comment.