diff --git a/pkg/yang/entry.go b/pkg/yang/entry.go index e39f239..8d6db9a 100644 --- a/pkg/yang/entry.go +++ b/pkg/yang/entry.go @@ -1194,6 +1194,10 @@ func (e *Entry) ApplyDeviate(deviateOpts ...DeviateOpt) []error { deviatedNode.Extra["must"] = append(deviatedNode.Extra["must"], musts...) } + if len(devSpec.Exts) > 0 { + deviatedNode.Exts = append(deviatedNode.Exts, devSpec.Exts...) + } + case DeviationNotSupported: dp := deviatedNode.Parent if dp == nil { diff --git a/pkg/yang/entry_test.go b/pkg/yang/entry_test.go index 1d60ef0..9dd8e98 100644 --- a/pkg/yang/entry_test.go +++ b/pkg/yang/entry_test.go @@ -3658,6 +3658,43 @@ func TestDeviation(t *testing.T) { }, }, }, + }, { + desc: "deviate add extension", + inFiles: map[string]string{ + "module": ` + module test-deviate-add-extension { + prefix "a"; + namespace "urn:a"; + + container foo { + leaf bar { + type string; + ext:extension1 "extension 1"; + } + } + deviation /foo/bar { + deviate add { + ext:extension2; + ext:extension3 "extension 3"; + } + } + }`, + }, + wants: map[string][]deviationTest{ + "test-deviate-add-extension": { + { + path: "/a:foo/a:bar", + entry: &Entry{ + Name: "mode", + Exts: []*Statement{ + {Keyword: "ext:extension1", HasArgument: true, Argument: "extension 1"}, + {Keyword: "ext:extension2"}, + {Keyword: "ext:extension3", HasArgument: true, Argument: "extension 3"}, + }, + }, + }, + }, + }, }} for _, tt := range tests { @@ -3769,6 +3806,11 @@ func TestDeviation(t *testing.T) { if MustDiff != "" { t.Errorf("Must deviation mismatch (-want +got):\n%s", MustDiff) } + + if extsDiff := cmp.Diff(want.entry.Exts, got.Exts, + cmpopts.IgnoreUnexported(Statement{})); extsDiff != "" { + t.Errorf("Exts mismatch (-want +got):\n%s", extsDiff) + } } } })