app/product: block products to be initialized with the feature flag (#21875)

Этот коммит содержится в:
Ibrahim Serdar Acikgoz
2022-12-16 13:00:15 +03:00
коммит произвёл GitHub
родитель 33b59e0e96
Коммит e58b6ffa3e
2 изменённых файлов: 41 добавлений и 1 удалений

Просмотреть файл

@@ -17,6 +17,9 @@ func (s *Server) initializeProducts(
// create a product map to consume // create a product map to consume
pmap := make(map[string]struct{}) pmap := make(map[string]struct{})
for name := range productMap { for name := range productMap {
if !s.shouldStart(name) {
continue
}
pmap[name] = struct{}{} pmap[name] = struct{}{}
} }
@@ -64,3 +67,11 @@ func (s *Server) initializeProducts(
return nil return nil
} }
func (s *Server) shouldStart(product string) bool {
if !s.Config().FeatureFlags.BoardsProduct && product == "boards" {
return false
}
return true
}

Просмотреть файл

@@ -6,6 +6,8 @@ package app
import ( import (
"testing" "testing"
"github.com/mattermost/mattermost-server/v6/app/platform"
"github.com/mattermost/mattermost-server/v6/config"
"github.com/mattermost/mattermost-server/v6/product" "github.com/mattermost/mattermost-server/v6/product"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
@@ -36,6 +38,9 @@ func (p *productB) Start() error { return nil }
func (p *productB) Stop() error { return nil } func (p *productB) Stop() error { return nil }
func TestInitializeProducts(t *testing.T) { func TestInitializeProducts(t *testing.T) {
ps, err := platform.New(platform.ServiceConfig{ConfigStore: config.NewTestMemoryStore()})
require.NoError(t, err)
t.Run("2 products and no circular dependency", func(t *testing.T) { t.Run("2 products and no circular dependency", func(t *testing.T) {
serviceMap := map[product.ServiceKey]any{ serviceMap := map[product.ServiceKey]any{
product.ConfigKey: nil, product.ConfigKey: nil,
@@ -64,11 +69,13 @@ func TestInitializeProducts(t *testing.T) {
}, },
}, },
} }
server := &Server{ server := &Server{
products: make(map[string]product.Product), products: make(map[string]product.Product),
platform: ps,
} }
err := server.initializeProducts(products, serviceMap) err = server.initializeProducts(products, serviceMap)
require.NoError(t, err) require.NoError(t, err)
require.Len(t, server.products, 2) require.Len(t, server.products, 2)
}) })
@@ -104,6 +111,7 @@ func TestInitializeProducts(t *testing.T) {
} }
server := &Server{ server := &Server{
products: make(map[string]product.Product), products: make(map[string]product.Product),
platform: ps,
} }
err := server.initializeProducts(products, serviceMap) err := server.initializeProducts(products, serviceMap)
@@ -132,10 +140,31 @@ func TestInitializeProducts(t *testing.T) {
} }
server := &Server{ server := &Server{
products: make(map[string]product.Product), products: make(map[string]product.Product),
platform: ps,
} }
err := server.initializeProducts(products, serviceMap) err := server.initializeProducts(products, serviceMap)
require.NoError(t, err) require.NoError(t, err)
require.Len(t, server.products, 2) require.Len(t, server.products, 2)
}) })
t.Run("boards product to be blocked", func(t *testing.T) {
products := map[string]product.Manifest{
"productA": {
Initializer: newProductA,
},
"boards": {
Initializer: newProductB,
},
}
server := &Server{
products: make(map[string]product.Product),
platform: ps,
}
err := server.initializeProducts(products, map[product.ServiceKey]any{})
require.NoError(t, err)
require.Len(t, server.products, 1)
})
} }