UT-Part 6 with overall coverage upto 45%
Change-Id: I4960bae8429ae34d88a2f98f288f72d582f9e788
diff --git a/internal/pkg/application/igmp_test.go b/internal/pkg/application/igmp_test.go
index 9e1e940..8f132bd 100644
--- a/internal/pkg/application/igmp_test.go
+++ b/internal/pkg/application/igmp_test.go
@@ -16,7 +16,17 @@
package application
import (
+ "context"
+ "net"
"testing"
+ "time"
+ "voltha-go-controller/internal/pkg/of"
+ common "voltha-go-controller/internal/pkg/types"
+ "voltha-go-controller/internal/test/mocks"
+
+ "github.com/golang/mock/gomock"
+ "github.com/google/gopacket/layers"
+ "github.com/stretchr/testify/assert"
)
func TestVoltApplication_InitIgmpSrcMac(t *testing.T) {
@@ -34,3 +44,511 @@
})
}
}
+
+func TestVoltApplication_UpdateIgmpProfile(t *testing.T) {
+ type args struct {
+ cntx context.Context
+ igmpProfileConfig *common.IGMPConfig
+ }
+ igmpConfig := &common.IGMPConfig{
+ ProfileID: "test_profile_id",
+ FastLeave: &vgcRebooted,
+ PeriodicQuery: &isUpgradeComplete,
+ WithRAUpLink: &isUpgradeComplete,
+ WithRADownLink: &isUpgradeComplete,
+ }
+ igmpProfile_data := &IgmpProfile{
+ ProfileID: "test_profile_id",
+ }
+
+ tests := []struct {
+ name string
+ args args
+ wantErr bool
+ }{
+ {
+ name: "UpdateIgmpProfile",
+ args: args{
+ cntx: context.Background(),
+ igmpProfileConfig: igmpConfig,
+ },
+ },
+ {
+ name: "UpdateIgmpProfile_Profile_not_found",
+ args: args{
+ cntx: context.Background(),
+ igmpProfileConfig: igmpConfig,
+ },
+ wantErr: true,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ va := &VoltApplication{}
+ switch tt.name {
+ case "UpdateIgmpProfile":
+ dbintf := mocks.NewMockDBIntf(gomock.NewController(t))
+ db = dbintf
+ dbintf.EXPECT().PutIgmpProfile(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil)
+ va.IgmpProfilesByName.Store("test_profile_id", igmpProfile_data)
+ if err := va.UpdateIgmpProfile(tt.args.cntx, tt.args.igmpProfileConfig); (err != nil) != tt.wantErr {
+ t.Errorf("VoltApplication.UpdateIgmpProfile() error = %v, wantErr %v", err, tt.wantErr)
+ }
+ case "UpdateIgmpProfile_Profile_not_found":
+ igmpConfig.ProfileID = ""
+ if err := va.UpdateIgmpProfile(tt.args.cntx, tt.args.igmpProfileConfig); (err != nil) != tt.wantErr {
+ t.Errorf("VoltApplication.UpdateIgmpProfile() error = %v, wantErr %v", err, tt.wantErr)
+ }
+ }
+ })
+ }
+}
+
+func TestVoltApplication_resetIgmpProfileToDefault(t *testing.T) {
+ type args struct {
+ cntx context.Context
+ }
+ igmpProfile_data := &IgmpProfile{
+ ProfileID: "test_profile_id",
+ }
+ tests := []struct {
+ name string
+ args args
+ }{
+ {
+ name: "resetIgmpProfileToDefault",
+ args: args{
+ cntx: context.Background(),
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ va := &VoltApplication{}
+ va.IgmpProfilesByName.Store("", igmpProfile_data)
+ dbintf := mocks.NewMockDBIntf(gomock.NewController(t))
+ db = dbintf
+ dbintf.EXPECT().PutIgmpProfile(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil)
+ va.resetIgmpProfileToDefault(tt.args.cntx)
+ })
+ }
+}
+
+func Test_ipv4ToUint(t *testing.T) {
+ type args struct {
+ ip net.IP
+ }
+ tests := []struct {
+ name string
+ args args
+ want uint32
+ }{
+ {
+ name: "ipv4ToUint",
+ args: args{
+ ip: AllSystemsMulticastGroupIP,
+ },
+ want: 3758096385,
+ },
+ {
+ name: "ipv4ToUint",
+ args: args{
+ ip: nil,
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ if got := ipv4ToUint(tt.args.ip); got != tt.want {
+ t.Errorf("ipv4ToUint() = %v, want %v", got, tt.want)
+ }
+ })
+ }
+}
+
+func TestIgmpUsEthLayer(t *testing.T) {
+ type args struct {
+ mcip net.IP
+ }
+ tests := []struct {
+ name string
+ args args
+ want *layers.Ethernet
+ }{
+ {
+ name: "IgmpUsEthLayer",
+ args: args{
+ mcip: AllSystemsMulticastGroupIP,
+ },
+ want: &layers.Ethernet{},
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ got := IgmpUsEthLayer(tt.args.mcip)
+ assert.NotNil(t, got)
+ })
+ }
+}
+
+func TestIgmpUsDot1qLayer(t *testing.T) {
+ type args struct {
+ vlan of.VlanType
+ priority uint8
+ }
+ tests := []struct {
+ name string
+ args args
+ want *layers.Dot1Q
+ }{
+ {
+ name: "IgmpUsDot1qLayer",
+ args: args{
+ vlan: of.VlanAny,
+ priority: 0,
+ },
+ want: &layers.Dot1Q{},
+ },
+ {
+ name: "IgmpDsDot1qLayer",
+ args: args{
+ vlan: of.VlanAny,
+ priority: 0,
+ },
+ want: &layers.Dot1Q{},
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ switch tt.name {
+ case "IgmpUsDot1qLayer":
+ got := IgmpUsDot1qLayer(tt.args.vlan, tt.args.priority)
+ assert.NotNil(t, got)
+ case "IgmpDsDot1qLayer":
+ got := IgmpDsDot1qLayer(tt.args.vlan, tt.args.priority)
+ assert.NotNil(t, got)
+ }
+ })
+ }
+}
+
+func TestIgmpv2UsIpv4Layer(t *testing.T) {
+ type args struct {
+ src net.IP
+ mcip net.IP
+ }
+ tests := []struct {
+ name string
+ args args
+ want *layers.IPv4
+ }{
+ {
+ name: "Igmpv2UsIpv4Layer",
+ args: args{
+ src: AllSystemsMulticastGroupIP,
+ mcip: AllSystemsMulticastGroupIP,
+ },
+ want: &layers.IPv4{},
+ },
+ {
+ name: "IgmpDsIpv4Layer",
+ args: args{
+ src: AllSystemsMulticastGroupIP,
+ mcip: net.ParseIP("0.0.0.0"),
+ },
+ want: &layers.IPv4{},
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ switch tt.name {
+ case "Igmpv2UsIpv4Layer":
+ got := Igmpv2UsIpv4Layer(tt.args.src, tt.args.mcip)
+ assert.NotNil(t, got)
+ case "IgmpDsIpv4Layer":
+ got := IgmpDsIpv4Layer(tt.args.src, tt.args.mcip)
+ assert.NotNil(t, got)
+ }
+ })
+ }
+}
+
+func TestIgmpv3UsIpv4Layer(t *testing.T) {
+ type args struct {
+ src net.IP
+ }
+ tests := []struct {
+ name string
+ args args
+ want *layers.IPv4
+ }{
+ {
+ name: "Igmpv3UsIpv4Layer",
+ args: args{
+ src: AllSystemsMulticastGroupIP,
+ },
+ want: &layers.IPv4{},
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ got := Igmpv3UsIpv4Layer(tt.args.src)
+ assert.NotNil(t, got)
+ })
+ }
+}
+
+func TestIgmpDsEthLayer(t *testing.T) {
+ type args struct {
+ mcip net.IP
+ }
+ tests := []struct {
+ name string
+ args args
+ want *layers.Ethernet
+ }{
+ {
+ name: "IgmpDsEthLayer",
+ args: args{
+ mcip: AllSystemsMulticastGroupIP,
+ },
+ want: &layers.Ethernet{},
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ got := IgmpDsEthLayer(tt.args.mcip)
+ assert.NotNil(t, got)
+ })
+ }
+}
+
+func TestIgmpQueryv2Layer(t *testing.T) {
+ type args struct {
+ mcip net.IP
+ resptime time.Duration
+ }
+ tests := []struct {
+ name string
+ args args
+ want *layers.IGMPv1or2
+ }{
+ {
+ name: "IgmpQueryv2Laye",
+ args: args{
+ mcip: AllSystemsMulticastGroupIP,
+ resptime: time.Microsecond,
+ },
+ want: &layers.IGMPv1or2{},
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ got := IgmpQueryv2Layer(tt.args.mcip, tt.args.resptime)
+ assert.NotNil(t, got)
+ })
+ }
+}
+
+func TestIgmpQueryv3Layer(t *testing.T) {
+ type args struct {
+ mcip net.IP
+ resptime time.Duration
+ }
+ tests := []struct {
+ name string
+ args args
+ want *layers.IGMP
+ }{
+ {
+ name: "IgmpQueryv3Layer",
+ args: args{
+ mcip: AllSystemsMulticastGroupIP,
+ resptime: time.Microsecond,
+ },
+ want: &layers.IGMP{},
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ got := IgmpQueryv3Layer(tt.args.mcip, tt.args.resptime)
+ assert.NotNil(t, got)
+ })
+ }
+}
+
+func TestIgmpReportv2Layer(t *testing.T) {
+ type args struct {
+ mcip net.IP
+ }
+ tests := []struct {
+ name string
+ args args
+ want *layers.IGMPv1or2
+ }{
+ {
+ name: "IgmpReportv2Layer",
+ args: args{
+ mcip: AllSystemsMulticastGroupIP,
+ },
+ want: &layers.IGMPv1or2{},
+ },
+ {
+ name: "IgmpLeavev2Layer",
+ args: args{
+ mcip: AllSystemsMulticastGroupIP,
+ },
+ want: &layers.IGMPv1or2{},
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ switch tt.name {
+ case "IgmpReportv2Layer":
+ got := IgmpReportv2Layer(tt.args.mcip)
+ assert.NotNil(t, got)
+ case "IgmpLeavev2Layer":
+ got := IgmpLeavev2Layer(tt.args.mcip)
+ assert.NotNil(t, got)
+ }
+ })
+ }
+}
+
+func TestIgmpReportv3Layer(t *testing.T) {
+ type args struct {
+ mcip net.IP
+ incl bool
+ srclist []net.IP
+ }
+ tests := []struct {
+ name string
+ args args
+ want *layers.IGMP
+ }{
+ {
+ name: "IgmpReportv3Layer",
+ args: args{
+ mcip: AllSystemsMulticastGroupIP,
+ incl: true,
+ },
+ want: &layers.IGMP{},
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ got := IgmpReportv3Layer(tt.args.mcip, tt.args.incl, tt.args.srclist)
+ assert.NotNil(t, got)
+ })
+ }
+}
+
+//func TestIgmpv2QueryPacket(t *testing.T) {
+// type args struct {
+// mcip net.IP
+// vlan of.VlanType
+// selfip net.IP
+// pbit uint8
+// maxResp uint32
+// }
+// tests := []struct {
+// name string
+// args args
+// want []byte
+// wantErr bool
+// }{
+// {
+// name: "IgmpReportv3Layer",
+// args: args{
+// vlan: 22,
+// selfip: net.ParseIP("224.0.0.1"),
+// pbit: 0,
+// maxResp: 1,
+// mcip: net.ParseIP("0.0.0.0"),
+// },
+// wantErr: true,
+// },
+// }
+// for _, tt := range tests {
+// t.Run(tt.name, func(t *testing.T) {
+// got, err := Igmpv2QueryPacket(tt.args.mcip, tt.args.vlan, tt.args.selfip, tt.args.pbit, tt.args.maxResp)
+// if (err != nil) != tt.wantErr {
+// t.Errorf("Igmpv2QueryPacket() error = %v, wantErr %v", err, tt.wantErr)
+// return
+// }
+// if !reflect.DeepEqual(got, tt.want) {
+// t.Errorf("Igmpv2QueryPacket() = %v, want %v", got, tt.want)
+// }
+// })
+// }
+// }
+
+func Test_getVersion(t *testing.T) {
+ type args struct {
+ ver string
+ }
+ tests := []struct {
+ name string
+ args args
+ want uint8
+ }{
+ {
+ name: "getVersion_IgmpVersion2",
+ args: args{
+ ver: "2",
+ },
+ want: IgmpVersion2,
+ },
+ {
+ name: "getVersion_IgmpVersion2",
+ args: args{
+ ver: "0",
+ },
+ want: IgmpVersion3,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ if got := getVersion(tt.args.ver); got != tt.want {
+ t.Errorf("getVersion() = %v, want %v", got, tt.want)
+ }
+ })
+ }
+}
+
+func TestIsIPPresent(t *testing.T) {
+ type args struct {
+ i net.IP
+ ips []net.IP
+ }
+ ips := []net.IP{}
+ ips = append(ips, AllSystemsMulticastGroupIP)
+ tests := []struct {
+ name string
+ args args
+ want bool
+ }{
+ {
+ name: "TestIsIPPresent_True",
+ args: args{
+ i: AllSystemsMulticastGroupIP,
+ ips: ips,
+ },
+ want: true,
+ },
+ {
+ name: "TestIsIPPresent_False",
+ args: args{
+ ips: ips,
+ },
+ want: false,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ if got := IsIPPresent(tt.args.i, tt.args.ips); got != tt.want {
+ t.Errorf("IsIPPresent() = %v, want %v", got, tt.want)
+ }
+ })
+ }
+}