| 111 | } |
| 112 | |
| 113 | func TestDirectoryLoader(t *testing.T) { |
| 114 | pluginA := mocks.NewFanOut(t) |
| 115 | pluginA.On("Describe").Return(&sdk.IntegrationInfo{ID: "a"}) |
| 116 | pluginA.On("String").Return("a").Maybe() |
| 117 | |
| 118 | pluginB := mocks.NewFanOut(t) |
| 119 | pluginB.On("Describe").Return(&sdk.IntegrationInfo{ID: "b"}) |
| 120 | pluginB.On("String").Return("b").Maybe() |
| 121 | |
| 122 | initializer := loaderMocks.NewPluginInitializer(t) |
| 123 | |
| 124 | dirLoader := &directoryLoader{ |
| 125 | pluginsDir: "./testdata/plugins", |
| 126 | initializer: initializer, |
| 127 | logger: log.NewHelper(log.NewStdLogger(io.Discard)), |
| 128 | } |
| 129 | |
| 130 | pluginDir, err := filepath.Abs(dirLoader.pluginsDir) |
| 131 | require.NoError(t, err) |
| 132 | |
| 133 | initializer.On("Init", filepath.Join(pluginDir, "chainloop-plugin-a")).Return( |
| 134 | &sdk.FanOutP{FanOut: pluginA, DisposeFunc: func() {}}, nil, |
| 135 | ) |
| 136 | |
| 137 | initializer.On("Init", filepath.Join(pluginDir, "chainloop-plugin-a-duplicated")).Return( |
| 138 | &sdk.FanOutP{FanOut: pluginA, DisposeFunc: func() {}}, nil, |
| 139 | ) |
| 140 | |
| 141 | initializer.On("Init", filepath.Join(pluginDir, "chainloop-plugin-b")).Return( |
| 142 | &sdk.FanOutP{FanOut: pluginB, DisposeFunc: func() {}}, nil, |
| 143 | ) |
| 144 | |
| 145 | plugins, err := dirLoader.load() |
| 146 | assert.NoError(t, err) |
| 147 | assert.Equal(t, 2, len(plugins)) |
| 148 | } |