From e58b6ffa3ed50f07f16eb5b0ae3d2061c04a5271 Mon Sep 17 00:00:00 2001 From: Ibrahim Serdar Acikgoz Date: Fri, 16 Dec 2022 13:00:15 +0300 Subject: [PATCH] app/product: block products to be initialized with the feature flag (#21875) --- app/product.go | 11 +++++++++++ app/product_test.go | 31 ++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/app/product.go b/app/product.go index 9183e40ea8..6ab3719c9a 100644 --- a/app/product.go +++ b/app/product.go @@ -17,6 +17,9 @@ func (s *Server) initializeProducts( // create a product map to consume pmap := make(map[string]struct{}) for name := range productMap { + if !s.shouldStart(name) { + continue + } pmap[name] = struct{}{} } @@ -64,3 +67,11 @@ func (s *Server) initializeProducts( return nil } + +func (s *Server) shouldStart(product string) bool { + if !s.Config().FeatureFlags.BoardsProduct && product == "boards" { + return false + } + + return true +} diff --git a/app/product_test.go b/app/product_test.go index 66d0ba6dcf..ad5c6c1be7 100644 --- a/app/product_test.go +++ b/app/product_test.go @@ -6,6 +6,8 @@ package app import ( "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/stretchr/testify/require" ) @@ -36,6 +38,9 @@ func (p *productB) Start() error { return nil } func (p *productB) Stop() error { return nil } 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) { serviceMap := map[product.ServiceKey]any{ product.ConfigKey: nil, @@ -64,11 +69,13 @@ func TestInitializeProducts(t *testing.T) { }, }, } + server := &Server{ products: make(map[string]product.Product), + platform: ps, } - err := server.initializeProducts(products, serviceMap) + err = server.initializeProducts(products, serviceMap) require.NoError(t, err) require.Len(t, server.products, 2) }) @@ -104,6 +111,7 @@ func TestInitializeProducts(t *testing.T) { } server := &Server{ products: make(map[string]product.Product), + platform: ps, } err := server.initializeProducts(products, serviceMap) @@ -132,10 +140,31 @@ func TestInitializeProducts(t *testing.T) { } server := &Server{ products: make(map[string]product.Product), + platform: ps, } err := server.initializeProducts(products, serviceMap) require.NoError(t, err) 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) + }) }