diff --git a/common/tools/configtxlator/update/update.go b/common/tools/configtxlator/update/update.go index 0669145bcfd..70ae4ab80b7 100644 --- a/common/tools/configtxlator/update/update.go +++ b/common/tools/configtxlator/update/update.go @@ -223,6 +223,14 @@ func computeGroupUpdate(original, updated *cb.ConfigGroup) (readSet, writeSet *c } func Compute(original, updated *cb.Config) (*cb.ConfigUpdate, error) { + if original.ChannelGroup == nil { + return nil, fmt.Errorf("no channel group included for original config") + } + + if updated.ChannelGroup == nil { + return nil, fmt.Errorf("no channel group included for updated config") + } + readSet, writeSet, groupUpdated := computeGroupUpdate(original.ChannelGroup, updated.ChannelGroup) if !groupUpdated { return nil, fmt.Errorf("no differences detected between original and updated config") diff --git a/common/tools/configtxlator/update/update_test.go b/common/tools/configtxlator/update/update_test.go index c01f3f0477c..6d91ab34ecd 100644 --- a/common/tools/configtxlator/update/update_test.go +++ b/common/tools/configtxlator/update/update_test.go @@ -39,6 +39,22 @@ func TestNoUpdate(t *testing.T) { assert.Error(t, err) } +func TestMissingGroup(t *testing.T) { + group := &cb.ConfigGroup{} + t.Run("MissingOriginal", func(t *testing.T) { + _, err := Compute(&cb.Config{}, &cb.Config{ChannelGroup: group}) + + assert.Error(t, err) + assert.Regexp(t, "no channel group included for original config", err.Error()) + }) + t.Run("MissingOriginal", func(t *testing.T) { + _, err := Compute(&cb.Config{ChannelGroup: group}, &cb.Config{}) + + assert.Error(t, err) + assert.Regexp(t, "no channel group included for updated config", err.Error()) + }) +} + func TestGroupModPolicyUpdate(t *testing.T) { original := &cb.ConfigGroup{ Version: 7,