next                                                                                                                                                                                
 gobgp/pkg/server/grpc_server.go:1060                                                    │ gobgp/internal/pkg/table/policy.go:3932                                                  
                                                                                         │                                                                                          
        cs := &api.Conditions{}                                                          │          cs := &api.Conditions{}                                                         
                                                                                         │          o, _ := NewMatchOption(s.Conditions.MatchPrefixSet.MatchSetOptions)             
        if s.Conditions.MatchPrefixSet.PrefixSet != "" {                                 │          if s.Conditions.MatchPrefixSet.PrefixSet != "" {                                
                cs.PrefixSet = &api.MatchSet{                                            │                  cs.PrefixSet = &api.MatchSet{                                           
                        Type: matchSetOptionsRestrictedTypeToAPI(s.Conditions.MatchPrefi │                          Type: api.MatchSet_Type(o),                                     
                        Name: s.Conditions.MatchPrefixSet.PrefixSet,                     │                          Name: s.Conditions.MatchPrefixSet.PrefixSet,                    
                }                                                                        │                  }                                                                       
        }                                                                                │          }                                                                               
        if s.Conditions.MatchNeighborSet.NeighborSet != "" {                             │          if s.Conditions.MatchNeighborSet.NeighborSet != "" {                            
                                                                                         │                  o, _ := NewMatchOption(s.Conditions.MatchNeighborSet.MatchSetOptions)   
                cs.NeighborSet = &api.MatchSet{                                          │                  cs.NeighborSet = &api.MatchSet{                                         
                        Type: matchSetOptionsRestrictedTypeToAPI(s.Conditions.MatchNeigh │                          Type: api.MatchSet_Type(o),                                     
                        Name: s.Conditions.MatchNeighborSet.NeighborSet,                 │                          Name: s.Conditions.MatchNeighborSet.NeighborSet,                
                }                                                                        │                  }                                                                       
        }                                                                                │          }                                                                               
        if s.Conditions.BgpConditions.AsPathLength.Operator != "" {                      │          if s.Conditions.BgpConditions.AsPathLength.Operator != "" {                     
                cs.AsPathLength = &api.AsPathLength{                                     │                  cs.AsPathLength = &api.AsPathLength{                                    
                        Length: s.Conditions.BgpConditions.AsPathLength.Value,           │                          Length: s.Conditions.BgpConditions.AsPathLength.Value,          
                        Type:   api.AsPathLength_Type(s.Conditions.BgpConditions.AsPathL │                          Type:   api.AsPathLength_Type(s.Conditions.BgpConditions.AsPathL
                }                                                                        │                  }                                                                       
        }                                                                                │          }                                                                               
        if s.Conditions.BgpConditions.MatchAsPathSet.AsPathSet != "" {                   │          if s.Conditions.BgpConditions.MatchAsPathSet.AsPathSet != "" {                  
                cs.AsPathSet = &api.MatchSet{                                            │                  cs.AsPathSet = &api.MatchSet{                                           
                        Type: api.MatchSet_Type(s.Conditions.BgpConditions.MatchAsPathSe │                          Type: api.MatchSet_Type(s.Conditions.BgpConditions.MatchAsPathSe
                        Name: s.Conditions.BgpConditions.MatchAsPathSet.AsPathSet,       │                          Name: s.Conditions.BgpConditions.MatchAsPathSet.AsPathSet,      
                }                                                                        │                  }                                                                       
        }                                                                                │          }                                                                               
        if s.Conditions.BgpConditions.MatchCommunitySet.CommunitySet != "" {             │          if s.Conditions.BgpConditions.MatchCommunitySet.CommunitySet != "" {            
                cs.CommunitySet = &api.MatchSet{                                         │                  cs.CommunitySet = &api.MatchSet{                                        
                        Type: api.MatchSet_Type(s.Conditions.BgpConditions.MatchCommunit │                          Type: api.MatchSet_Type(s.Conditions.BgpConditions.MatchCommunit
                        Name: s.Conditions.BgpConditions.MatchCommunitySet.CommunitySet, │                          Name: s.Conditions.BgpConditions.MatchCommunitySet.CommunitySet,
                }                                                                        │                  }                                                                       
        }                                                                                │          }                                                                               
        if s.Conditions.BgpConditions.MatchExtCommunitySet.ExtCommunitySet != "" {       │          if s.Conditions.BgpConditions.MatchExtCommunitySet.ExtCommunitySet != "" {      
                cs.ExtCommunitySet = &api.MatchSet{                                      │                  cs.ExtCommunitySet = &api.MatchSet{                                     
                        Type: api.MatchSet_Type(s.Conditions.BgpConditions.MatchExtCommu │                          Type: api.MatchSet_Type(s.Conditions.BgpConditions.MatchExtCommu
                        Name: s.Conditions.BgpConditions.MatchExtCommunitySet.ExtCommuni │                          Name: s.Conditions.BgpConditions.MatchExtCommunitySet.ExtCommuni
                }                                                                        │                  }                                                                       
        }                                                                                │          }                                                                               
        if s.Conditions.BgpConditions.MatchLargeCommunitySet.LargeCommunitySet != "" {   │          if s.Conditions.BgpConditions.MatchLargeCommunitySet.LargeCommunitySet != "" {  
                cs.LargeCommunitySet = &api.MatchSet{                                    │                  cs.LargeCommunitySet = &api.MatchSet{                                   
                        Type: api.MatchSet_Type(s.Conditions.BgpConditions.MatchLargeCom │                          Type: api.MatchSet_Type(s.Conditions.BgpConditions.MatchLargeCom
                        Name: s.Conditions.BgpConditions.MatchLargeCommunitySet.LargeCom │                          Name: s.Conditions.BgpConditions.MatchLargeCommunitySet.LargeCom
                }                                                                        │                  }                                                                       
        }                                                                                │          }                                                                               
        if s.Conditions.BgpConditions.RouteType != "" {                                  │          if s.Conditions.BgpConditions.RouteType != "" {                                 
                cs.RouteType = api.Conditions_RouteType(s.Conditions.BgpConditions.Route │                  cs.RouteType = api.Conditions_RouteType(s.Conditions.BgpConditions.Route
        }                                                                                │          }                                                                               
        if len(s.Conditions.BgpConditions.NextHopInList) > 0 {                           │          if len(s.Conditions.BgpConditions.NextHopInList) > 0 {                          
                cs.NextHopInList = s.Conditions.BgpConditions.NextHopInList              │                  cs.NextHopInList = s.Conditions.BgpConditions.NextHopInList             
        }                                                                                │          }                                                                               
        if s.Conditions.BgpConditions.AfiSafiInList != nil {                             │          if s.Conditions.BgpConditions.AfiSafiInList != nil {                            
                afiSafiIn := make([]*api.Family, 0)                                      │                  afiSafiIn := make([]*api.Family, 0)                                     
                for _, afiSafiType := range s.Conditions.BgpConditions.AfiSafiInList {   │                  for _, afiSafiType := range s.Conditions.BgpConditions.AfiSafiInList {  
                        if mapped, ok := bgp.AddressFamilyValueMap[string(afiSafiType)]; │                          if mapped, ok := bgp.AddressFamilyValueMap[string(afiSafiType)];
                                afi, safi := bgp.RouteFamilyToAfiSafi(mapped)            │                                  afi, safi := bgp.RouteFamilyToAfiSafi(mapped)           
                                afiSafiIn = append(afiSafiIn, &api.Family{Afi: api.Famil │                                  afiSafiIn = append(afiSafiIn, &api.Family{Afi: api.Famil
                        }                                                                │                          }                                                               
                }                                                                        │                  }                                                                       
                cs.AfiSafiIn = afiSafiIn                                                 │                  cs.AfiSafiIn = afiSafiIn                                                
        }                                                                                │          }                                                                               
        cs.RpkiResult = int32(s.Conditions.BgpConditions.RpkiValidationResult.ToInt())   │          cs.RpkiResult = int32(s.Conditions.BgpConditions.RpkiValidationResult.ToInt())  
        as := &api.Actions{                                                              │          as := &api.Actions{                                                             
                RouteAction: func() api.RouteAction {                                    │                  RouteAction: func() api.RouteAction {                                   
                        switch s.Actions.RouteDisposition {                              │                          switch s.Actions.RouteDisposition {                             
                        case config.ROUTE_DISPOSITION_ACCEPT_ROUTE:                      │                          case config.ROUTE_DISPOSITION_ACCEPT_ROUTE:                     
                                return api.RouteAction_ACCEPT                            │                                  return api.RouteAction_ACCEPT                           
                        case config.ROUTE_DISPOSITION_REJECT_ROUTE:                      │                          case config.ROUTE_DISPOSITION_REJECT_ROUTE:                     
                                return api.RouteAction_REJECT                            │                                  return api.RouteAction_REJECT                           
                        }                                                                │                          }                                                               
                        return api.RouteAction_NONE                                      │                          return api.RouteAction_NONE                                     
                }(),                                                                     │                  }(),                                                                    
                Community: func() *api.CommunityAction {                                 │                  Community: func() *api.CommunityAction {                                
                        if len(s.Actions.BgpActions.SetCommunity.SetCommunityMethod.Comm │                          if len(s.Actions.BgpActions.SetCommunity.SetCommunityMethod.Comm
                                return nil                                               │                                  return nil                                              
                        }                                                                │                          }                                                               
                        return &api.CommunityAction{                                     │                          return &api.CommunityAction{                                    
                                Type:        api.CommunityAction_Type(config.BgpSetCommu │                                  Type:        api.CommunityAction_Type(config.BgpSetCommu
                                Communities: s.Actions.BgpActions.SetCommunity.SetCommun │                                  Communities: s.Actions.BgpActions.SetCommunity.SetCommun
                }(),                                                                     │                  }(),                                                                    
                Med: func() *api.MedAction {                                             │                  Med: func() *api.MedAction {                                            
                        medStr := strings.TrimSpace(string(s.Actions.BgpActions.SetMed)) │                          medStr := strings.TrimSpace(string(s.Actions.BgpActions.SetMed))
                        if len(medStr) == 0 {                                            │                          if len(medStr) == 0 {                                           
                                return nil                                               │                                  return nil                                              
                        }                                                                │                          }                                                               
                        matches := _regexpMedActionType.FindStringSubmatch(medStr)       │                          matches := _regexpMedActionType.FindStringSubmatch(medStr)      
                        if len(matches) == 0 {                                           │                          if len(matches) == 0 {                                          
                                return nil                                               │                                  return nil                                              
                        }                                                                │                          }                                                               
                        action := api.MedAction_REPLACE                                  │                          action := api.MedAction_REPLACE                                 
                        switch matches[1] {                                              │                          switch matches[1] {                                             
                        case "+", "-":                                                   │                          case "+", "-":                                                  
                                action = api.MedAction_MOD                               │                                  action = api.MedAction_MOD                              
                        }                                                                │                          }                                                               
                        value, err := strconv.ParseInt(matches[1]+matches[2], 10, 64)    │                          value, err := strconv.ParseInt(matches[1]+matches[2], 10, 64)   
                        if err != nil {                                                  │                          if err != nil {                                                 
                                return nil                                               │                                  return nil                                              
                        }                                                                │                          }                                                               
                        return &api.MedAction{                                           │                          return &api.MedAction{                                          
                                Value: value,                                            │                                  Value: value,                                           
                                Type:  action,                                           │                                  Type:  action,                                          
                        }                                                                │                          }                                                               
                }(),                                                                     │                  }(),                                                                    
                AsPrepend: func() *api.AsPrependAction {                                 │                  AsPrepend: func() *api.AsPrependAction {                                
                        if len(s.Actions.BgpActions.SetAsPathPrepend.As) == 0 {          │                          if len(s.Actions.BgpActions.SetAsPathPrepend.As) == 0 {         
                                return nil                                               │                                  return nil                                              
                        }                                                                │                          }                                                               
                        var asn uint64                                                   │                          var asn uint64                                                  
                        useleft := false                                                 │                          useleft := false                                                
                        if s.Actions.BgpActions.SetAsPathPrepend.As != "last-as" {       │                          if s.Actions.BgpActions.SetAsPathPrepend.As != "last-as" {      
                                asn, _ = strconv.ParseUint(s.Actions.BgpActions.SetAsPat │                                  asn, _ = strconv.ParseUint(s.Actions.BgpActions.SetAsPat
                        } else {                                                         │                          } else {                                                        
                                useleft = true                                           │                                  useleft = true                                          
                        }                                                                │                          }                                                               
                        return &api.AsPrependAction{                                     │                          return &api.AsPrependAction{                                    
                                Asn:         uint32(asn),                                │                                  Asn:         uint32(asn),                               
                                Repeat:      uint32(s.Actions.BgpActions.SetAsPathPrepen │                                  Repeat:      uint32(s.Actions.BgpActions.SetAsPathPrepen
                                UseLeftMost: useleft,                                    │                                  UseLeftMost: useleft,                                   
                        }                                                                │                          }                                                               
                }(),                                                                     │                  }(),                                                                    
                ExtCommunity: func() *api.CommunityAction {                              │                  ExtCommunity: func() *api.CommunityAction {                             
                        if len(s.Actions.BgpActions.SetExtCommunity.SetExtCommunityMetho │                          if len(s.Actions.BgpActions.SetExtCommunity.SetExtCommunityMetho
                                return nil                                               │                                  return nil                                              
                        }                                                                │                          }                                                               
                        return &api.CommunityAction{                                     │                          return &api.CommunityAction{                                    
                                Type:        api.CommunityAction_Type(config.BgpSetCommu │                                  Type:        api.CommunityAction_Type(config.BgpSetCommu
                                Communities: s.Actions.BgpActions.SetExtCommunity.SetExt │                                  Communities: s.Actions.BgpActions.SetExtCommunity.SetExt
                        }                                                                │                          }                                                               
                }(),                                                                     │                  }(),                                                                    
                LargeCommunity: func() *api.CommunityAction {                            │                  LargeCommunity: func() *api.CommunityAction {                           
                        if len(s.Actions.BgpActions.SetLargeCommunity.SetLargeCommunityM │                          if len(s.Actions.BgpActions.SetLargeCommunity.SetLargeCommunityM
                                return nil                                               │                                  return nil                                              
                        }                                                                │                          }                                                               
                        return &api.CommunityAction{                                     │                          return &api.CommunityAction{                                    
                                Type:        api.CommunityAction_Type(config.BgpSetCommu │                                  Type:        api.CommunityAction_Type(config.BgpSetCommu
                                Communities: s.Actions.BgpActions.SetLargeCommunity.SetL │                                  Communities: s.Actions.BgpActions.SetLargeCommunity.SetL
                        }                                                                │                          }                                                               
                }(),                                                                     │                  }(),                                                                    
                Nexthop: func() *api.NexthopAction {                                     │                  Nexthop: func() *api.NexthopAction {                                    
                        if len(string(s.Actions.BgpActions.SetNextHop)) == 0 {           │                          if len(string(s.Actions.BgpActions.SetNextHop)) == 0 {          
                                return nil                                               │                                  return nil                                              
                        }                                                                │                          }                                                               
                                                                                         │                                                                                          
                        if string(s.Actions.BgpActions.SetNextHop) == "self" {           │                          if string(s.Actions.BgpActions.SetNextHop) == "self" {          
                                return &api.NexthopAction{                               │                                  return &api.NexthopAction{                              
                                        Self: true,                                      │                                          Self: true,                                     
                                }                                                        │                                  }                                                       
                        }                                                                │                          }                                                               
                        if string(s.Actions.BgpActions.SetNextHop) == "unchanged" {      │                          if string(s.Actions.BgpActions.SetNextHop) == "unchanged" {     
                                return &api.NexthopAction{                               │                                  return &api.NexthopAction{                              
                                        Unchanged: true,                                 │                                          Unchanged: true,                                
                                }                                                        │                                  }                                                       
                        }                                                                │                          }                                                               
                        return &api.NexthopAction{                                       │                          return &api.NexthopAction{                                      
                                Address: string(s.Actions.BgpActions.SetNextHop),        │                                  Address: string(s.Actions.BgpActions.SetNextHop),       
                        }                                                                │                          }                                                               
                }(),                                                                     │                  }(),                                                                    
                LocalPref: func() *api.LocalPrefAction {                                 │                  LocalPref: func() *api.LocalPrefAction {                                
                        if s.Actions.BgpActions.SetLocalPref == 0 {                      │                          if s.Actions.BgpActions.SetLocalPref == 0 {                     
                                return nil                                               │                                  return nil                                              
                        }                                                                │                          }                                                               
                        return &api.LocalPrefAction{Value: s.Actions.BgpActions.SetLocal │                          return &api.LocalPrefAction{Value: s.Actions.BgpActions.SetLocal
                }(),                                                                     │                  }(),                                                                    
        }                                                                                │          }                                                                               
        return &api.Statement{                                                           │          return &api.Statement{                                                          
                Name:       s.Name,                                                      │                  Name:       s.Name,                                                     
                Conditions: cs,                                                          │                  Conditions: cs,                                                         
                Actions:    as,                                                          │                  Actions:    as,                                                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:759                                             │ gobgp/internal/pkg/table/policy_test.go:1091                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // setup                                                                         │          // setup                                                                        
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam1 := []bgp.AsPathParamInterface{                                      │          aspathParam1 := []bgp.AsPathParamInterface{                                     
                bgp.NewAsPathParam(2, []uint16{65001, 65000, 65010, 65004, 65005}),      │                  bgp.NewAs4PathParam(2, []uint32{                                        
        }                                                                                │                          createAs4Value("65001.1"),                                      
                                                                                         │                          createAs4Value("65000.1"),                                      
                                                                                         │                          createAs4Value("65010.1"),                                      
                                                                                         │                          createAs4Value("65004.1"),                                      
                                                                                         │                          createAs4Value("65005.1"),                                      
                                                                                         │                  })}                                                                     
                                                                                         │                                                                                          
        aspath := bgp.NewPathAttributeAsPath(aspathParam1)                               │          aspath := bgp.NewPathAttributeAsPath(aspathParam1)                              
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg1 := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 │          updateMsg1 := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                
        UpdatePathAttrs4ByteAs(logger, updateMsg1.Body.(*bgp.BGPUpdate))                 │          UpdatePathAttrs4ByteAs(logger, updateMsg1.Body.(*bgp.BGPUpdate))                
        path1 := ProcessMessage(updateMsg1, peer, time.Now())[0]                         │          path1 := ProcessMessage(updateMsg1, peer, time.Now())[0]                        
                                                                                         │                                                                                          
        aspathParam2 := []bgp.AsPathParamInterface{                                      │          aspathParam2 := []bgp.AsPathParamInterface{                                     
                bgp.NewAsPathParam(2, []uint16{65010}),                                  │                  bgp.NewAs4PathParam(2, []uint32{                                        
                                                                                         │                          createAs4Value("65010.1"),                                      
                                                                                         │                  }),                                                                     
        }                                                                                │          }                                                                               
        aspath2 := bgp.NewPathAttributeAsPath(aspathParam2)                              │          aspath2 := bgp.NewPathAttributeAsPath(aspathParam2)                             
        pathAttributes = []bgp.PathAttributeInterface{origin, aspath2, nexthop, med}     │          pathAttributes = []bgp.PathAttributeInterface{origin, aspath2, nexthop, med}    
        updateMsg2 := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 │          updateMsg2 := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                
        UpdatePathAttrs4ByteAs(logger, updateMsg2.Body.(*bgp.BGPUpdate))                 │          UpdatePathAttrs4ByteAs(logger, updateMsg2.Body.(*bgp.BGPUpdate))                
        path2 := ProcessMessage(updateMsg2, peer, time.Now())[0]                         │          path2 := ProcessMessage(updateMsg2, peer, time.Now())[0]                        
                                                                                         │                                                                                          
        // create match condition                                                        │          // create match condition                                                       
        asPathSet1 := config.AsPathSet{                                                  │          asPathSet1 := config.AsPathSet{                                                 
                AsPathSetName: "asset1",                                                 │                  AsPathSetName: "asset1",                                                
                AsPathList:    []string{"^65001"},                                       │                  AsPathList:    []string{fmt.Sprintf("^%d", createAs4Value("65001.1"))}, 
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        asPathSet2 := config.AsPathSet{                                                  │          asPathSet2 := config.AsPathSet{                                                 
                AsPathSetName: "asset2",                                                 │                  AsPathSetName: "asset2",                                                
                AsPathList:    []string{"65005$"},                                       │                  AsPathList:    []string{fmt.Sprintf("%d$", createAs4Value("65005.1"))}, 
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        asPathSet3 := config.AsPathSet{                                                  │          asPathSet3 := config.AsPathSet{                                                 
                AsPathSetName: "asset3",                                                 │                  AsPathSetName: "asset3",                                                
                AsPathList:    []string{"65004", "65005$"},                              │                  AsPathList: []string{                                                   
                                                                                         │                          fmt.Sprintf("%d", createAs4Value("65004.1")),                   
                                                                                         │                          fmt.Sprintf("%d$", createAs4Value("65005.1")),                  
                                                                                         │                  },                                                                      
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        asPathSet4 := config.AsPathSet{                                                  │          asPathSet4 := config.AsPathSet{                                                 
                AsPathSetName: "asset4",                                                 │                  AsPathSetName: "asset4",                                                
                AsPathList:    []string{"65000$"},                                       │                  AsPathList: []string{                                                   
                                                                                         │                          fmt.Sprintf("%d$", createAs4Value("65000.1")),                  
                                                                                         │                  },                                                                      
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        asPathSet5 := config.AsPathSet{                                                  │          asPathSet5 := config.AsPathSet{                                                 
                AsPathSetName: "asset5",                                                 │                  AsPathSetName: "asset5",                                                
                AsPathList:    []string{"65010"},                                        │                  AsPathList: []string{                                                   
                                                                                         │                          fmt.Sprintf("%d", createAs4Value("65010.1")),                   
                                                                                         │                  },                                                                      
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        asPathSet6 := config.AsPathSet{                                                  │          asPathSet6 := config.AsPathSet{                                                 
                AsPathSetName: "asset6",                                                 │                  AsPathSetName: "asset6",                                                
                AsPathList:    []string{"^65010$"},                                      │                  AsPathList: []string{                                                   
                                                                                         │                          fmt.Sprintf("%d$", createAs4Value("65010.1")),                  
                                                                                         │                  },                                                                      
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        m := make(map[string]DefinedSet)                                                 │          m := make(map[string]DefinedSet)                                                
        for _, s := range []config.AsPathSet{asPathSet1, asPathSet2, asPathSet3,         │          for _, s := range []config.AsPathSet{asPathSet1, asPathSet2, asPathSet3,        
                asPathSet4, asPathSet5, asPathSet6} {                                    │                  asPathSet4, asPathSet5, asPathSet6} {                                   
                a, _ := NewAsPathSet(s)                                                  │                  a, _ := NewAsPathSet(s)                                                 
                m[s.AsPathSetName] = a                                                   │                  m[s.AsPathSetName] = a                                                  
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        createAspathC := func(name string, option config.MatchSetOptionsType) *AsPathCon │          createAspathC := func(name string, option config.MatchSetOptionsType) *AsPathCon
                matchSet := config.MatchAsPathSet{}                                      │                  matchSet := config.MatchAsPathSet{}                                     
                matchSet.AsPathSet = name                                                │                  matchSet.AsPathSet = name                                               
                matchSet.MatchSetOptions = option                                        │                  matchSet.MatchSetOptions = option                                       
                p, _ := NewAsPathCondition(matchSet)                                     │                  p, _ := NewAsPathCondition(matchSet)                                    
                if v, ok := m[name]; ok {                                                │                  if v, ok := m[name]; ok {                                               
                        p.set = v.(*AsPathSet)                                           │                          p.set = v.(*AsPathSet)                                          
                }                                                                        │                  }                                                                       
                return p                                                                 │                  return p                                                                
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        p1 := createAspathC("asset1", config.MATCH_SET_OPTIONS_TYPE_ANY)                 │          p1 := createAspathC("asset1", config.MATCH_SET_OPTIONS_TYPE_ANY)                
        p2 := createAspathC("asset2", config.MATCH_SET_OPTIONS_TYPE_ANY)                 │          p2 := createAspathC("asset2", config.MATCH_SET_OPTIONS_TYPE_ANY)                
        p3 := createAspathC("asset3", config.MATCH_SET_OPTIONS_TYPE_ANY)                 │          p3 := createAspathC("asset3", config.MATCH_SET_OPTIONS_TYPE_ANY)                
        p4 := createAspathC("asset4", config.MATCH_SET_OPTIONS_TYPE_ANY)                 │          p4 := createAspathC("asset4", config.MATCH_SET_OPTIONS_TYPE_ANY)                
        p5 := createAspathC("asset5", config.MATCH_SET_OPTIONS_TYPE_ANY)                 │          p5 := createAspathC("asset5", config.MATCH_SET_OPTIONS_TYPE_ANY)                
        p6 := createAspathC("asset6", config.MATCH_SET_OPTIONS_TYPE_ANY)                 │          p6 := createAspathC("asset6", config.MATCH_SET_OPTIONS_TYPE_ANY)                
                                                                                         │                                                                                          
        p7 := createAspathC("asset3", config.MATCH_SET_OPTIONS_TYPE_ALL)                 │          p7 := createAspathC("asset3", config.MATCH_SET_OPTIONS_TYPE_ALL)                
        p8 := createAspathC("asset3", config.MATCH_SET_OPTIONS_TYPE_INVERT)              │          p8 := createAspathC("asset3", config.MATCH_SET_OPTIONS_TYPE_INVERT)             
                                                                                         │                                                                                          
        // test                                                                          │          // test                                                                         
        assert.Equal(t, true, p1.Evaluate(path1, nil))                                   │          assert.Equal(t, true, p1.Evaluate(path1, nil))                                  
        assert.Equal(t, true, p2.Evaluate(path1, nil))                                   │          assert.Equal(t, true, p2.Evaluate(path1, nil))                                  
        assert.Equal(t, true, p3.Evaluate(path1, nil))                                   │          assert.Equal(t, true, p3.Evaluate(path1, nil))                                  
        assert.Equal(t, false, p4.Evaluate(path1, nil))                                  │          assert.Equal(t, false, p4.Evaluate(path1, nil))                                 
        assert.Equal(t, true, p5.Evaluate(path1, nil))                                   │          assert.Equal(t, true, p5.Evaluate(path1, nil))                                  
        assert.Equal(t, false, p6.Evaluate(path1, nil))                                  │          assert.Equal(t, false, p6.Evaluate(path1, nil))                                 
        assert.Equal(t, true, p6.Evaluate(path2, nil))                                   │          assert.Equal(t, true, p6.Evaluate(path2, nil))                                  
                                                                                         │                                                                                          
        assert.Equal(t, true, p7.Evaluate(path1, nil))                                   │          assert.Equal(t, true, p7.Evaluate(path1, nil))                                  
        assert.Equal(t, true, p8.Evaluate(path2, nil))                                   │          assert.Equal(t, true, p8.Evaluate(path2, nil))                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/config/bgp_configs.go:1847                                           │ gobgp/internal/pkg/config/bgp_configs.go:3229                                            
                                                                                         │                                                                                          
        // original -> bgp:peer-group-name                                               │          // original -> bgp:neighbor-address                                             
        // original -> bgp:peer-group-config                                             │          // original -> bgp:neighbor-config                                              
        // Configuration parameters relating to the BGP neighbor or                      │          // Configuration parameters relating to the BGP neighbor or                     
        // group.                                                                        │          // group.                                                                       
        Config PeerGroupConfig `mapstructure:"config" json:"config,omitempty"`           │          Config NeighborConfig `mapstructure:"config" json:"config,omitempty"`           
        // original -> bgp:peer-group-state                                              │          // original -> bgp:neighbor-state                                               
        // State information relating to the BGP neighbor or group.                      │          // State information relating to the BGP neighbor or group.                     
        State PeerGroupState `mapstructure:"state" json:"state,omitempty"`               │          State NeighborState `mapstructure:"state" json:"state,omitempty"`               
        // original -> bgp:timers                                                        │          // original -> bgp:timers                                                       
        // Timers related to a BGP neighbor or group.                                    │          // Timers related to a BGP neighbor or group.                                   
        Timers Timers `mapstructure:"timers" json:"timers,omitempty"`                    │          Timers Timers `mapstructure:"timers" json:"timers,omitempty"`                   
        // original -> bgp:transport                                                     │          // original -> bgp:transport                                                    
        // Transport session parameters for the BGP neighbor or group.                   │          // Transport session parameters for the BGP neighbor or group.                  
        Transport Transport `mapstructure:"transport" json:"transport,omitempty"`        │          Transport Transport `mapstructure:"transport" json:"transport,omitempty"`       
        // original -> bgp:error-handling                                                │          // original -> bgp:error-handling                                               
        // Error handling parameters used for the BGP neighbor or                        │          // Error handling parameters used for the BGP neighbor or                       
        // group.                                                                        │          // group.                                                                       
        ErrorHandling ErrorHandling `mapstructure:"error-handling" json:"error-handling, │          ErrorHandling ErrorHandling `mapstructure:"error-handling" json:"error-handling,
        // original -> bgp:logging-options                                               │          // original -> bgp:logging-options                                              
        // Logging options for events related to the BGP neighbor or                     │          // Logging options for events related to the BGP neighbor or                    
        // group.                                                                        │          // group.                                                                       
        LoggingOptions LoggingOptions `mapstructure:"logging-options" json:"logging-opti │          LoggingOptions LoggingOptions `mapstructure:"logging-options" json:"logging-opti
        // original -> bgp:ebgp-multihop                                                 │          // original -> bgp:ebgp-multihop                                                
        // eBGP multi-hop parameters for the BGP neighbor or group.                      │          // eBGP multi-hop parameters for the BGP neighbor or group.                     
        EbgpMultihop EbgpMultihop `mapstructure:"ebgp-multihop" json:"ebgp-multihop,omit │          EbgpMultihop EbgpMultihop `mapstructure:"ebgp-multihop" json:"ebgp-multihop,omit
        // original -> bgp:route-reflector                                               │          // original -> bgp:route-reflector                                              
        // Route reflector parameters for the BGP neighbor or group.                     │          // Route reflector parameters for the BGP neighbor or group.                    
        RouteReflector RouteReflector `mapstructure:"route-reflector" json:"route-reflec │          RouteReflector RouteReflector `mapstructure:"route-reflector" json:"route-reflec
        // original -> bgp:as-path-options                                               │          // original -> bgp:as-path-options                                              
        // AS_PATH manipulation parameters for the BGP neighbor or                       │          // AS_PATH manipulation parameters for the BGP neighbor or                      
        // group.                                                                        │          // group.                                                                       
        AsPathOptions AsPathOptions `mapstructure:"as-path-options" json:"as-path-option │          AsPathOptions AsPathOptions `mapstructure:"as-path-options" json:"as-path-option
        // original -> bgp:add-paths                                                     │          // original -> bgp:add-paths                                                    
        // Parameters relating to the advertisement and receipt of                       │          // Parameters relating to the advertisement and receipt of                      
        // multiple paths for a single NLRI (add-paths).                                 │          // multiple paths for a single NLRI (add-paths).                                
        AddPaths AddPaths `mapstructure:"add-paths" json:"add-paths,omitempty"`          │          AddPaths AddPaths `mapstructure:"add-paths" json:"add-paths,omitempty"`         
        // original -> bgp:afi-safis                                                     │          // original -> bgp:afi-safis                                                    
        // Per-address-family configuration parameters associated with                   │          // Per-address-family configuration parameters associated with                  
        // the neighbor or group.                                                        │          // the neighbor or group.                                                       
        AfiSafis []AfiSafi `mapstructure:"afi-safis" json:"afi-safis,omitempty"`         │          AfiSafis []AfiSafi `mapstructure:"afi-safis" json:"afi-safis,omitempty"`        
        // original -> bgp:graceful-restart                                              │          // original -> bgp:graceful-restart                                             
        // Parameters relating the graceful restart mechanism for BGP.                   │          // Parameters relating the graceful restart mechanism for BGP.                  
        GracefulRestart GracefulRestart `mapstructure:"graceful-restart" json:"graceful- │          GracefulRestart GracefulRestart `mapstructure:"graceful-restart" json:"graceful-
        // original -> rpol:apply-policy                                                 │          // original -> rpol:apply-policy                                                
        // Anchor point for routing policies in the model.                               │          // Anchor point for routing policies in the model.                              
        // Import and export policies are with respect to the local                      │          // Import and export policies are with respect to the local                     
        // routing table, i.e., export (send) and import (receive),                      │          // routing table, i.e., export (send) and import (receive),                     
        // depending on the context.                                                     │          // depending on the context.                                                    
        ApplyPolicy ApplyPolicy `mapstructure:"apply-policy" json:"apply-policy,omitempt │          ApplyPolicy ApplyPolicy `mapstructure:"apply-policy" json:"apply-policy,omitempt
        // original -> bgp-mp:use-multiple-paths                                         │          // original -> bgp-mp:use-multiple-paths                                        
        // Parameters related to the use of multiple paths for the                       │          // Parameters related to the use of multiple-paths for the same                 
        // same NLRI.                                                                    │          // NLRI when they are received only from this neighbor.                         
        UseMultiplePaths UseMultiplePaths `mapstructure:"use-multiple-paths" json:"use-m │          UseMultiplePaths UseMultiplePaths `mapstructure:"use-multiple-paths" json:"use-m
        // original -> gobgp:route-server                                                │          // original -> gobgp:route-server                                               
        // Configure the local router as a route server.                                 │          // Configure the local router as a route server.                                
        RouteServer RouteServer `mapstructure:"route-server" json:"route-server,omitempt │          RouteServer RouteServer `mapstructure:"route-server" json:"route-server,omitempt
        // original -> gobgp:ttl-security                                                │          // original -> gobgp:ttl-security                                               
        // Configure TTL Security feature.                                               │          // Configure TTL Security feature.                                              
        TtlSecurity TtlSecurity `mapstructure:"ttl-security" json:"ttl-security,omitempt │          TtlSecurity TtlSecurity `mapstructure:"ttl-security" json:"ttl-security,omitempt
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/packet/bgp/bgp_test.go:2463                                                   │ gobgp/pkg/packet/bgp/bgp_test.go:2358                                                    
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        var tests = []struct {                                                           │          var tests = []struct {                                                          
                in        []byte                                                         │                  in        []byte                                                        
                want      string                                                         │                  want      string                                                        
                serialize bool                                                           │                  serialize bool                                                          
                err       bool                                                           │                  err       bool                                                          
        }{                                                                               │          }{                                                                              
                {                                                                        │                  {                                                                       
                        []byte{                                                          │                          []byte{                                                         
                                0x04, 0x0c, 0x00, 0x0c, // type 1036, length 12          │                                  0x04, 0x0a, 0x00, 0x0c, // type 1034, length 12         
                                0x00, 0x00, // flags and reserved                        │                                  0x00, 0x00, // flags and reserved                       
                                0x00, 0x88, 0xb8, // range: 35000                        │                                  0x00, 0x88, 0xb8, // range: 35000                       
                                0x04, 0x89, 0x00, 0x03, 0x01, 0x88, 0x94, // SID/Label T │                                  0x04, 0x89, 0x00, 0x03, 0x01, 0x88, 0x94, // SID/Label T
                        },                                                               │                          },                                                              
                        `{"type":1036,"flags":0,"ranges":[{"Range":35000,"FirstLabel":{" │                          `{"type":1034,"flags":0,"ranges":[{"Range":35000,"FirstLabel":{"
                        true,                                                            │                          true,                                                           
                        false,                                                           │                          false,                                                          
                },                                                                       │                  },                                                                      
                {                                                                        │                  {                                                                       
                        []byte{                                                          │                          []byte{                                                         
                                0x04, 0x0c, 0x00, 0x0d, // type 1036, length 13          │                                  0x04, 0x0a, 0x00, 0x0d, // type 1034, length 13         
                                0x00, 0x00, // flags and reserved                        │                                  0x00, 0x00, // flags and reserved                       
                                0x00, 0x88, 0xb8, // range: 35000                        │                                  0x00, 0x88, 0xb8, // range: 35000                       
                                0x04, 0x89, 0x00, 0x04, 0x04, 0x3B, 0x73, 0x49, // SID/L │                                  0x04, 0x89, 0x00, 0x04, 0x04, 0x3B, 0x73, 0x49, // SID/L
                        },                                                               │                          },                                                              
                        `{"type":1036,"flags":0,"ranges":[{"Range":35000,"FirstLabel":{" │                          `{"type":1034,"flags":0,"ranges":[{"Range":35000,"FirstLabel":{"
                        true,                                                            │                          true,                                                           
                        false,                                                           │                          false,                                                          
                },                                                                       │                  },                                                                      
                {                                                                        │                  {                                                                       
                        []byte{                                                          │                          []byte{                                                         
                                0x04, 0x0c, 0x00, 0x17, // type 1036, length 23          │                                  0x04, 0x0a, 0x00, 0x17, // type 1034, length 23         
                                0x00, 0x00, // flags and reserved                        │                                  0x00, 0x00, // flags and reserved                       
                                0x00, 0x88, 0xb8, // range: 35000                        │                                  0x00, 0x88, 0xb8, // range: 35000                       
                                0x04, 0x89, 0x00, 0x04, 0x04, 0x3B, 0x73, 0x49, // SID/L │                                  0x04, 0x89, 0x00, 0x04, 0x04, 0x3B, 0x73, 0x49, // SID/L
                                0x0f, 0x42, 0x40, // range: 1000000                      │                                  0x0f, 0x42, 0x40, // range: 1000000                     
                                0x04, 0x89, 0x00, 0x03, 0x01, 0x88, 0x94, // SID/Label T │                                  0x04, 0x89, 0x00, 0x03, 0x01, 0x88, 0x94, // SID/Label T
                        },                                                               │                          },                                                              
                        `{"type":1036,"flags":0,"ranges":[{"Range":35000,"FirstLabel":{" │                          `{"type":1034,"flags":0,"ranges":[{"Range":35000,"FirstLabel":{"
                        true,                                                            │                          true,                                                           
                        false,                                                           │                          false,                                                          
                },                                                                       │                  },                                                                      
                {                                                                        │                  {                                                                       
                        []byte{                                                          │                          []byte{                                                         
                                0x04, 0x0c, 0x00, 0x17, // type 1036, length 23          │                                  0x04, 0x0a, 0x00, 0x17, // type 1034, length 23         
                                0x00, 0x00, // flags and reserved                        │                                  0x00, 0x00, // flags and reserved                       
                                0x00, 0x88, 0xb8, // range: 35000                        │                                  0x00, 0x88, 0xb8, // range: 35000                       
                                0x04, 0x89, 0x00, 0x04, 0x04, 0x3B, 0x73, 0x49, // SID/L │                                  0x04, 0x89, 0x00, 0x04, 0x04, 0x3B, 0x73, 0x49, // SID/L
                                0x0f, 0x42, 0x40, // range: 1000000                      │                                  0x0f, 0x42, 0x40, // range: 1000000                     
                                0x04, 0x89, 0x00, 0x03, 0x01, 0x88, 0x94, // SID/Label T │                                  0x04, 0x89, 0x00, 0x03, 0x01, 0x88, 0x94, // SID/Label T
                                0xff, 0xff, 0xff, // some random bytes - should be ignor │                                  0xff, 0xff, 0xff, // some random bytes - should be ignor
                        },                                                               │                          },                                                              
                        `{"type":1036,"flags":0,"ranges":[{"Range":35000,"FirstLabel":{" │                          `{"type":1034,"flags":0,"ranges":[{"Range":35000,"FirstLabel":{"
                        false,                                                           │                          false,                                                          
                        false,                                                           │                          false,                                                          
                },                                                                       │                  },                                                                      
                {                                                                        │                  {                                                                       
                        []byte{                                                          │                          []byte{                                                         
                                0x04, 0x0c, 0x00, 0xcc, // type 1036, length 204 (corrup │                                  0x04, 0x0a, 0x00, 0xcc, // type 1034, length 204 (corrup
                                0x00, 0x00, // flags and reserved                        │                                  0x00, 0x00, // flags and reserved                       
                                0x00, 0x88, 0xb8, // range: 35000                        │                                  0x00, 0x88, 0xb8, // range: 35000                       
                                0x04, 0x89, 0x00, 0x03, 0x01, 0x88, 0x94, // SID/Label T │                                  0x04, 0x89, 0x00, 0x03, 0x01, 0x88, 0x94, // SID/Label T
                        },                                                               │                          },                                                              
                        "",                                                              │                          "",                                                             
                        false,                                                           │                          false,                                                          
                        true,                                                            │                          true,                                                           
                },                                                                       │                  },                                                                      
                {                                                                        │                  {                                                                       
                        []byte{                                                          │                          []byte{                                                         
                                0x04, 0x0c, 0x00, 0x11, // type 1036, length 23          │                                  0x04, 0x0a, 0x00, 0x11, // type 1034, length 23         
                                0x00, 0x00, // flags and reserved                        │                                  0x00, 0x00, // flags and reserved                       
                                0x00, 0x88, 0xb8, // range: 35000                        │                                  0x00, 0x88, 0xb8, // range: 35000                       
                                0x04, 0x89, 0x00, 0x04, 0x04, 0x3B, 0x73, 0x49, // SID/L │                                  0x04, 0x89, 0x00, 0x04, 0x04, 0x3B, 0x73, 0x49, // SID/L
                                0x0f, 0x42, 0x40, // range: 1000000                      │                                  0x0f, 0x42, 0x40, // range: 1000000                     
                                0x04, // No SID/Label sub-TLV                            │                                  0x04, // No SID/Label sub-TLV                           
                        },                                                               │                          },                                                              
                        "",                                                              │                          "",                                                             
                        false,                                                           │                          false,                                                          
                        true,                                                            │                          true,                                                           
                },                                                                       │                  },                                                                      
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        for _, test := range tests {                                                     │          for _, test := range tests {                                                    
                tlv := LsTLVSrLocalBlock{}                                               │                  tlv := LsTLVSrCapabilities{}                                            
                if test.err {                                                            │                  if test.err {                                                           
                        assert.Error(tlv.DecodeFromBytes(test.in))                       │                          assert.Error(tlv.DecodeFromBytes(test.in))                      
                        continue                                                         │                          continue                                                        
                } else {                                                                 │                  } else {                                                                
                        assert.NoError(tlv.DecodeFromBytes(test.in))                     │                          assert.NoError(tlv.DecodeFromBytes(test.in))                    
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
                got, err := tlv.MarshalJSON()                                            │                  got, err := tlv.MarshalJSON()                                           
                assert.NoError(err)                                                      │                  assert.NoError(err)                                                     
                assert.Equal(got, []byte(test.want))                                     │                  assert.Equal(got, []byte(test.want))                                    
                                                                                         │                                                                                          
                if test.serialize {                                                      │                  if test.serialize {                                                     
                        s, err := tlv.Serialize()                                        │                          s, err := tlv.Serialize()                                       
                        assert.NoError(err)                                              │                          assert.NoError(err)                                             
                        assert.Equal(test.in, s)                                         │                          assert.Equal(test.in, s)                                        
                }                                                                        │                  }                                                                       
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:1109                                     │ gobgp/internal/pkg/table/table_manager_test.go:1644                                      
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
        SelectionOptions.ExternalCompareRouterId = true                                  │                                                                                          
                                                                                         │                                                                                          
        // low origin message                                                            │          // path1                                                                        
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000, 65200})                         │          aspath1 := createAsPathAttribute([]uint32{65000, 65100, 65200})                 
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high origin message                                                           │          // path 1 from same peer but short AS_PATH                                      
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65000, 65100})                         │          aspath2 := createAsPathAttribute([]uint32{65000, 65100})                        
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                         │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med2 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer3 := peerR3()                                                                │          pList, err = tm.ProcessUpdate(peer1, bgpMessage2)                               
        pList, err = tm.ProcessUpdate(peer3, bgpMessage2)                                │                                                                                          
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          checkPattr := func(expected *bgp.BGPMessage, actual *Path) {                    
        expectedOrigin := pathAttributes[0]                                              │                  pathAttributes := expected.Body.(*bgp.BGPUpdate).PathAttributes         
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │                  expectedOrigin := pathAttributes[0]                                     
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │                  attr := actual.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                    
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │                  pathOrigin := attr.(*bgp.PathAttributeOrigin)                           
                                                                                         │                  assert.Equal(t, expectedOrigin, pathOrigin)                             
        expectedAsPath := pathAttributes[1]                                              │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │                  expectedAsPath := pathAttributes[1]                                     
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                    
        assert.Equal(t, expectedAsPath, pathAspath)                                      │                  pathAspath := attr.(*bgp.PathAttributeAsPath)                           
                                                                                         │                  assert.Equal(t, expectedAsPath, pathAspath)                             
        expectedNexthopAttr := pathAttributes[2]                                         │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │                  expectedNexthopAttr := pathAttributes[2]                                
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                   
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │                  pathNexthop := attr.(*bgp.PathAttributeNextHop)                         
                                                                                         │                  assert.Equal(t, expectedNexthopAttr, pathNexthop)                       
        expectedMed := pathAttributes[3]                                                 │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │                  expectedMed := pathAttributes[3]                                        
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)            
        assert.Equal(t, expectedMed, pathMed)                                            │                  pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                       
                                                                                         │                  assert.Equal(t, expectedMed, pathMed)                                   
        // check PathAttribute length                                                    │                                                                                          
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │                                                                                          
                                                                                         │                                                                                          
                                                                                         │                  // check PathAttribute length                                           
                                                                                         │                  assert.Equal(t, len(pathAttributes), len(path.GetPathAttrs()))          
                                                                                         │          }                                                                               
                                                                                         │          checkPattr(bgpMessage2, path)                                                   
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.100.1"                                               │          expectedNexthop := "192.168.50.1"                                               
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:342                                      │ gobgp/internal/pkg/table/table_manager_test.go:1644                                      
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // low localpref message                                                         │          // path1                                                                        
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000})                                │          aspath1 := createAsPathAttribute([]uint32{65000, 65100, 65200})                 
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(0)                                     │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high localpref message                                                        │          // path 1 from same peer but short AS_PATH                                      
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{})                                     │          aspath2 := createAsPathAttribute([]uint32{65000, 65100})                        
        nexthop2 := bgp.NewPathAttributeNextHop("0.0.0.0")                               │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        var peer2 *PeerInfo = &PeerInfo{                                                 │          pList, err = tm.ProcessUpdate(peer1, bgpMessage2)                               
                Address: net.ParseIP("0.0.0.0"),                                         │                                                                                          
        }                                                                                │                                                                                          
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │                                                                                          
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          checkPattr := func(expected *bgp.BGPMessage, actual *Path) {                    
        expectedOrigin := pathAttributes[0]                                              │                  pathAttributes := expected.Body.(*bgp.BGPUpdate).PathAttributes         
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │                  expectedOrigin := pathAttributes[0]                                     
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │                  attr := actual.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                    
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │                  pathOrigin := attr.(*bgp.PathAttributeOrigin)                           
                                                                                         │                  assert.Equal(t, expectedOrigin, pathOrigin)                             
        expectedAsPath := pathAttributes[1]                                              │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │                  expectedAsPath := pathAttributes[1]                                     
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                    
        assert.Equal(t, expectedAsPath, pathAspath)                                      │                  pathAspath := attr.(*bgp.PathAttributeAsPath)                           
                                                                                         │                  assert.Equal(t, expectedAsPath, pathAspath)                             
        expectedNexthopAttr := pathAttributes[2]                                         │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │                  expectedNexthopAttr := pathAttributes[2]                                
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                   
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │                  pathNexthop := attr.(*bgp.PathAttributeNextHop)                         
                                                                                         │                  assert.Equal(t, expectedNexthopAttr, pathNexthop)                       
        expectedMed := pathAttributes[3]                                                 │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │                  expectedMed := pathAttributes[3]                                        
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)            
        assert.Equal(t, expectedMed, pathMed)                                            │                  pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                       
                                                                                         │                  assert.Equal(t, expectedMed, pathMed)                                   
        // check PathAttribute length                                                    │                                                                                          
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │                                                                                          
                                                                                         │                                                                                          
                                                                                         │                  // check PathAttribute length                                           
                                                                                         │                  assert.Equal(t, len(pathAttributes), len(path.GetPathAttrs()))          
                                                                                         │          }                                                                               
                                                                                         │          checkPattr(bgpMessage2, path)                                                   
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "0.0.0.0"                                                     │          expectedNexthop := "192.168.50.1"                                               
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:342                                      │ gobgp/internal/pkg/table/table_manager_test.go:1109                                      
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │          SelectionOptions.ExternalCompareRouterId = true                                 
                                                                                         │                                                                                          
        // low localpref message                                                         │          // low origin message                                                           
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000})                                │          aspath1 := createAsPathAttribute([]uint32{65000, 65200})                        
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(0)                                     │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high localpref message                                                        │          // high origin message                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{})                                     │          aspath2 := createAsPathAttribute([]uint32{65000, 65100})                        
        nexthop2 := bgp.NewPathAttributeNextHop("0.0.0.0")                               │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                        
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        var peer2 *PeerInfo = &PeerInfo{                                                 │          peer3 := peerR3()                                                               
                Address: net.ParseIP("0.0.0.0"),                                         │          pList, err = tm.ProcessUpdate(peer3, bgpMessage2)                               
        }                                                                                │                                                                                          
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │                                                                                          
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "0.0.0.0"                                                     │          expectedNexthop := "192.168.100.1"                                              
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:621                                      │ gobgp/internal/pkg/table/table_manager_test.go:1644                                      
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // low origin message                                                            │          // path1                                                                        
        origin1 := bgp.NewPathAttributeOrigin(1)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65200, 65000})                         │          aspath1 := createAsPathAttribute([]uint32{65000, 65100, 65200})                 
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high origin message                                                           │          // path 1 from same peer but short AS_PATH                                      
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65000, 65100})                        
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                         │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          pList, err = tm.ProcessUpdate(peer1, bgpMessage2)                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │                                                                                          
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          checkPattr := func(expected *bgp.BGPMessage, actual *Path) {                    
        expectedOrigin := pathAttributes[0]                                              │                  pathAttributes := expected.Body.(*bgp.BGPUpdate).PathAttributes         
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │                  expectedOrigin := pathAttributes[0]                                     
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │                  attr := actual.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                    
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │                  pathOrigin := attr.(*bgp.PathAttributeOrigin)                           
                                                                                         │                  assert.Equal(t, expectedOrigin, pathOrigin)                             
        expectedAsPath := pathAttributes[1]                                              │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │                  expectedAsPath := pathAttributes[1]                                     
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                    
        assert.Equal(t, expectedAsPath, pathAspath)                                      │                  pathAspath := attr.(*bgp.PathAttributeAsPath)                           
                                                                                         │                  assert.Equal(t, expectedAsPath, pathAspath)                             
        expectedNexthopAttr := pathAttributes[2]                                         │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │                  expectedNexthopAttr := pathAttributes[2]                                
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                   
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │                  pathNexthop := attr.(*bgp.PathAttributeNextHop)                         
                                                                                         │                  assert.Equal(t, expectedNexthopAttr, pathNexthop)                       
        expectedMed := pathAttributes[3]                                                 │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │                  expectedMed := pathAttributes[3]                                        
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)            
        assert.Equal(t, expectedMed, pathMed)                                            │                  pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                       
                                                                                         │                  assert.Equal(t, expectedMed, pathMed)                                   
        // check PathAttribute length                                                    │                                                                                          
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │                                                                                          
                                                                                         │                                                                                          
                                                                                         │                  // check PathAttribute length                                           
                                                                                         │                  assert.Equal(t, len(pathAttributes), len(path.GetPathAttrs()))          
                                                                                         │          }                                                                               
                                                                                         │          checkPattr(bgpMessage2, path)                                                   
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.100.1"                                               │          expectedNexthop := "192.168.50.1"                                               
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:783                                      │ gobgp/internal/pkg/table/table_manager_test.go:1644                                      
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // low origin message                                                            │          // path1                                                                        
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65200, 65000})                         │          aspath1 := createAsPathAttribute([]uint32{65000, 65100, 65200})                 
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(500)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high origin message                                                           │          // path 1 from same peer but short AS_PATH                                      
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65000, 65100})                        
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                         │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          pList, err = tm.ProcessUpdate(peer1, bgpMessage2)                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │                                                                                          
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          checkPattr := func(expected *bgp.BGPMessage, actual *Path) {                    
        expectedOrigin := pathAttributes[0]                                              │                  pathAttributes := expected.Body.(*bgp.BGPUpdate).PathAttributes         
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │                  expectedOrigin := pathAttributes[0]                                     
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │                  attr := actual.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                    
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │                  pathOrigin := attr.(*bgp.PathAttributeOrigin)                           
                                                                                         │                  assert.Equal(t, expectedOrigin, pathOrigin)                             
        expectedAsPath := pathAttributes[1]                                              │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │                  expectedAsPath := pathAttributes[1]                                     
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                    
        assert.Equal(t, expectedAsPath, pathAspath)                                      │                  pathAspath := attr.(*bgp.PathAttributeAsPath)                           
                                                                                         │                  assert.Equal(t, expectedAsPath, pathAspath)                             
        expectedNexthopAttr := pathAttributes[2]                                         │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │                  expectedNexthopAttr := pathAttributes[2]                                
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                   
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │                  pathNexthop := attr.(*bgp.PathAttributeNextHop)                         
                                                                                         │                  assert.Equal(t, expectedNexthopAttr, pathNexthop)                       
        expectedMed := pathAttributes[3]                                                 │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │                  expectedMed := pathAttributes[3]                                        
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)            
        assert.Equal(t, expectedMed, pathMed)                                            │                  pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                       
                                                                                         │                  assert.Equal(t, expectedMed, pathMed)                                   
        // check PathAttribute length                                                    │                                                                                          
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │                                                                                          
                                                                                         │                                                                                          
                                                                                         │                  // check PathAttribute length                                           
                                                                                         │                  assert.Equal(t, len(pathAttributes), len(path.GetPathAttrs()))          
                                                                                         │          }                                                                               
                                                                                         │          checkPattr(bgpMessage2, path)                                                   
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.100.1"                                               │          expectedNexthop := "192.168.50.1"                                               
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:945                                      │ gobgp/internal/pkg/table/table_manager_test.go:1644                                      
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // low origin message                                                            │          // path1                                                                        
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000, 65200})                         │          aspath1 := createAsPathAttribute([]uint32{65000, 65100, 65200})                 
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high origin message                                                           │          // path 1 from same peer but short AS_PATH                                      
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65000, 65100})                        
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                         │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med2 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          pList, err = tm.ProcessUpdate(peer1, bgpMessage2)                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │                                                                                          
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          checkPattr := func(expected *bgp.BGPMessage, actual *Path) {                    
        expectedOrigin := pathAttributes[0]                                              │                  pathAttributes := expected.Body.(*bgp.BGPUpdate).PathAttributes         
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │                  expectedOrigin := pathAttributes[0]                                     
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │                  attr := actual.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                    
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │                  pathOrigin := attr.(*bgp.PathAttributeOrigin)                           
                                                                                         │                  assert.Equal(t, expectedOrigin, pathOrigin)                             
        expectedAsPath := pathAttributes[1]                                              │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │                  expectedAsPath := pathAttributes[1]                                     
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                    
        assert.Equal(t, expectedAsPath, pathAspath)                                      │                  pathAspath := attr.(*bgp.PathAttributeAsPath)                           
                                                                                         │                  assert.Equal(t, expectedAsPath, pathAspath)                             
        expectedNexthopAttr := pathAttributes[2]                                         │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │                  expectedNexthopAttr := pathAttributes[2]                                
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                   
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │                  pathNexthop := attr.(*bgp.PathAttributeNextHop)                         
                                                                                         │                  assert.Equal(t, expectedNexthopAttr, pathNexthop)                       
        expectedMed := pathAttributes[3]                                                 │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │                  expectedMed := pathAttributes[3]                                        
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)            
        assert.Equal(t, expectedMed, pathMed)                                            │                  pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                       
                                                                                         │                  assert.Equal(t, expectedMed, pathMed)                                   
        // check PathAttribute length                                                    │                                                                                          
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │                                                                                          
                                                                                         │                                                                                          
                                                                                         │                  // check PathAttribute length                                           
                                                                                         │                  assert.Equal(t, len(pathAttributes), len(path.GetPathAttrs()))          
                                                                                         │          }                                                                               
                                                                                         │          checkPattr(bgpMessage2, path)                                                   
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.100.1"                                               │          expectedNexthop := "192.168.50.1"                                               
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:621                                      │ gobgp/internal/pkg/table/table_manager_test.go:1109                                      
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │          SelectionOptions.ExternalCompareRouterId = true                                 
                                                                                         │                                                                                          
        // low origin message                                                            │          // low origin message                                                           
        origin1 := bgp.NewPathAttributeOrigin(1)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65200, 65000})                         │          aspath1 := createAsPathAttribute([]uint32{65000, 65200})                        
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high origin message                                                           │          // high origin message                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65000, 65100})                        
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                         │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                        
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer3 := peerR3()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer3, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.100.1"                                               │          expectedNexthop := "192.168.100.1"                                              
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:783                                      │ gobgp/internal/pkg/table/table_manager_test.go:1109                                      
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │          SelectionOptions.ExternalCompareRouterId = true                                 
                                                                                         │                                                                                          
        // low origin message                                                            │          // low origin message                                                           
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65200, 65000})                         │          aspath1 := createAsPathAttribute([]uint32{65000, 65200})                        
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(500)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high origin message                                                           │          // high origin message                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65000, 65100})                        
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                         │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                        
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer3 := peerR3()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer3, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.100.1"                                               │          expectedNexthop := "192.168.100.1"                                              
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:945                                      │ gobgp/internal/pkg/table/table_manager_test.go:1109                                      
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │          SelectionOptions.ExternalCompareRouterId = true                                 
                                                                                         │                                                                                          
        // low origin message                                                            │          // low origin message                                                           
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000, 65200})                         │          aspath1 := createAsPathAttribute([]uint32{65000, 65200})                        
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high origin message                                                           │          // high origin message                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65000, 65100})                        
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                         │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                        
        med2 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer3 := peerR3()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer3, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.100.1"                                               │          expectedNexthop := "192.168.100.1"                                              
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:621                                      │ gobgp/internal/pkg/table/table_manager_test.go:342                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // low origin message                                                            │          // low localpref message                                                        
        origin1 := bgp.NewPathAttributeOrigin(1)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65200, 65000})                         │          aspath1 := createAsPathAttribute([]uint32{65000})                               
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(0)                                    
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high origin message                                                           │          // high localpref message                                                       
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{})                                    
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                         │          nexthop2 := bgp.NewPathAttributeNextHop("0.0.0.0")                              
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          var peer2 *PeerInfo = &PeerInfo{                                                
                                                                                         │                  Address: net.ParseIP("0.0.0.0"),                                        
                                                                                         │          }                                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.100.1"                                               │          expectedNexthop := "0.0.0.0"                                                    
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:783                                      │ gobgp/internal/pkg/table/table_manager_test.go:342                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // low origin message                                                            │          // low localpref message                                                        
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65200, 65000})                         │          aspath1 := createAsPathAttribute([]uint32{65000})                               
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(500)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(0)                                    
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high origin message                                                           │          // high localpref message                                                       
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{})                                    
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                         │          nexthop2 := bgp.NewPathAttributeNextHop("0.0.0.0")                              
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          var peer2 *PeerInfo = &PeerInfo{                                                
                                                                                         │                  Address: net.ParseIP("0.0.0.0"),                                        
                                                                                         │          }                                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.100.1"                                               │          expectedNexthop := "0.0.0.0"                                                    
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:945                                      │ gobgp/internal/pkg/table/table_manager_test.go:342                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // low origin message                                                            │          // low localpref message                                                        
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000, 65200})                         │          aspath1 := createAsPathAttribute([]uint32{65000})                               
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(0)                                    
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high origin message                                                           │          // high localpref message                                                       
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{})                                    
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                         │          nexthop2 := bgp.NewPathAttributeNextHop("0.0.0.0")                              
        med2 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          var peer2 *PeerInfo = &PeerInfo{                                                
                                                                                         │                  Address: net.ParseIP("0.0.0.0"),                                        
                                                                                         │          }                                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.100.1"                                               │          expectedNexthop := "0.0.0.0"                                                    
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:783                                      │ gobgp/internal/pkg/table/table_manager_test.go:621                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // low origin message                                                            │          // low origin message                                                           
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(1)                                        
        aspath1 := createAsPathAttribute([]uint32{65200, 65000})                         │          aspath1 := createAsPathAttribute([]uint32{65200, 65000})                        
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(500)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high origin message                                                           │          // high origin message                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65000})                        
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                         │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                        
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.100.1"                                               │          expectedNexthop := "192.168.100.1"                                              
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:945                                      │ gobgp/internal/pkg/table/table_manager_test.go:621                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // low origin message                                                            │          // low origin message                                                           
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(1)                                        
        aspath1 := createAsPathAttribute([]uint32{65000, 65200})                         │          aspath1 := createAsPathAttribute([]uint32{65200, 65000})                        
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high origin message                                                           │          // high origin message                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65000})                        
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                         │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                        
        med2 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.100.1"                                               │          expectedNexthop := "192.168.100.1"                                              
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:945                                      │ gobgp/internal/pkg/table/table_manager_test.go:783                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // low origin message                                                            │          // low origin message                                                           
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000, 65200})                         │          aspath1 := createAsPathAttribute([]uint32{65200, 65000})                        
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(500)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high origin message                                                           │          // high origin message                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65000})                        
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                         │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                        
        med2 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.100.1"                                               │          expectedNexthop := "192.168.100.1"                                              
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:180                                      │ gobgp/internal/pkg/table/table_manager_test.go:1644                                      
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // low localpref message                                                         │          // path1                                                                        
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000})                                │          aspath1 := createAsPathAttribute([]uint32{65000, 65100, 65200})                 
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(0)                                     │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high localpref message                                                        │          // path 1 from same peer but short AS_PATH                                      
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65000, 65100})                        
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(200)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          pList, err = tm.ProcessUpdate(peer1, bgpMessage2)                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │                                                                                          
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          checkPattr := func(expected *bgp.BGPMessage, actual *Path) {                    
        expectedOrigin := pathAttributes[0]                                              │                  pathAttributes := expected.Body.(*bgp.BGPUpdate).PathAttributes         
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │                  expectedOrigin := pathAttributes[0]                                     
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │                  attr := actual.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                    
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │                  pathOrigin := attr.(*bgp.PathAttributeOrigin)                           
                                                                                         │                  assert.Equal(t, expectedOrigin, pathOrigin)                             
        expectedAsPath := pathAttributes[1]                                              │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │                  expectedAsPath := pathAttributes[1]                                     
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                    
        assert.Equal(t, expectedAsPath, pathAspath)                                      │                  pathAspath := attr.(*bgp.PathAttributeAsPath)                           
                                                                                         │                  assert.Equal(t, expectedAsPath, pathAspath)                             
        expectedNexthopAttr := pathAttributes[2]                                         │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │                  expectedNexthopAttr := pathAttributes[2]                                
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                   
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │                  pathNexthop := attr.(*bgp.PathAttributeNextHop)                         
                                                                                         │                  assert.Equal(t, expectedNexthopAttr, pathNexthop)                       
        expectedMed := pathAttributes[3]                                                 │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │                  expectedMed := pathAttributes[3]                                        
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │                  attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)            
        assert.Equal(t, expectedMed, pathMed)                                            │                  pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                       
                                                                                         │                  assert.Equal(t, expectedMed, pathMed)                                   
        // check PathAttribute length                                                    │                                                                                          
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │                                                                                          
                                                                                         │                                                                                          
                                                                                         │                  // check PathAttribute length                                           
                                                                                         │                  assert.Equal(t, len(pathAttributes), len(path.GetPathAttrs()))          
                                                                                         │          }                                                                               
                                                                                         │          checkPattr(bgpMessage2, path)                                                   
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.50.1"                                                │          expectedNexthop := "192.168.50.1"                                               
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:180                                      │ gobgp/internal/pkg/table/table_manager_test.go:1109                                      
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │          SelectionOptions.ExternalCompareRouterId = true                                 
                                                                                         │                                                                                          
        // low localpref message                                                         │          // low origin message                                                           
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000})                                │          aspath1 := createAsPathAttribute([]uint32{65000, 65200})                        
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(0)                                     │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high localpref message                                                        │          // high origin message                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65000, 65100})                        
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                        
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(200)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer3 := peerR3()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer3, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.50.1"                                                │          expectedNexthop := "192.168.100.1"                                              
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:180                                      │ gobgp/internal/pkg/table/table_manager_test.go:342                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // low localpref message                                                         │          // low localpref message                                                        
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000})                                │          aspath1 := createAsPathAttribute([]uint32{65000})                               
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(0)                                     │          med1 := bgp.NewPathAttributeMultiExitDisc(0)                                    
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high localpref message                                                        │          // high localpref message                                                       
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{})                                    
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop2 := bgp.NewPathAttributeNextHop("0.0.0.0")                              
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(200)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          var peer2 *PeerInfo = &PeerInfo{                                                
                                                                                         │                  Address: net.ParseIP("0.0.0.0"),                                        
                                                                                         │          }                                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.50.1"                                                │          expectedNexthop := "0.0.0.0"                                                    
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:180                                      │ gobgp/internal/pkg/table/table_manager_test.go:621                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // low localpref message                                                         │          // low origin message                                                           
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(1)                                        
        aspath1 := createAsPathAttribute([]uint32{65000})                                │          aspath1 := createAsPathAttribute([]uint32{65200, 65000})                        
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(0)                                     │          med1 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high localpref message                                                        │          // high origin message                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65000})                        
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                        
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(200)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.50.1"                                                │          expectedNexthop := "192.168.100.1"                                              
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:180                                      │ gobgp/internal/pkg/table/table_manager_test.go:783                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // low localpref message                                                         │          // low origin message                                                           
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000})                                │          aspath1 := createAsPathAttribute([]uint32{65200, 65000})                        
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(0)                                     │          med1 := bgp.NewPathAttributeMultiExitDisc(500)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high localpref message                                                        │          // high origin message                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65000})                        
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                        
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(200)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.50.1"                                                │          expectedNexthop := "192.168.100.1"                                              
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:180                                      │ gobgp/internal/pkg/table/table_manager_test.go:945                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // low localpref message                                                         │          // low origin message                                                           
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000})                                │          aspath1 := createAsPathAttribute([]uint32{65000, 65200})                        
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(0)                                     │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // high localpref message                                                        │          // high origin message                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65000})                        
        nexthop2 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                        
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(200)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                origin2, aspath2, nexthop2, med2, localpref2,                            │                  origin2, aspath2, nexthop2, med2, localpref2,                           
        }                                                                                │          }                                                                               
        nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)              │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                  │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.50.1"                                                │          expectedNexthop := "192.168.100.1"                                              
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:701                                      │ gobgp/internal/pkg/table/table_manager_test.go:424                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        origin1 := bgp.NewPathAttributeOrigin(1)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65200, 65000})                         │          aspath1 := createAsPathAttribute([]uint32{65000})                               
        mp_reach1 := createMpReach("2001::192:168:50:1",                                 │          mp_reach1 := createMpReach("2001::192:168:50:1",                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med1 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                mp_reach1, origin1, aspath1, med1, localpref1,                           │                  mp_reach1, origin1, aspath1, med1, localpref1,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)                │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)               
                                                                                         │                                                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{})                                    
        mp_reach2 := createMpReach("2001::192:168:100:1",                                │          mp_reach2 := createMpReach("::",                                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(200)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                mp_reach2, origin2, aspath2, med2, localpref2,                           │                  mp_reach2, origin2, aspath2, med2, localpref2,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)                │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)               
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          var peer2 *PeerInfo = &PeerInfo{                                                
                                                                                         │                  Address: net.ParseIP("0.0.0.0"),                                        
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 5, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 5, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:100:1"                                         │          expectedNexthop := "::"                                                         
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:863                                      │ gobgp/internal/pkg/table/table_manager_test.go:424                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65200, 65000})                         │          aspath1 := createAsPathAttribute([]uint32{65000})                               
        mp_reach1 := createMpReach("2001::192:168:50:1",                                 │          mp_reach1 := createMpReach("2001::192:168:50:1",                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med1 := bgp.NewPathAttributeMultiExitDisc(500)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                mp_reach1, origin1, aspath1, med1, localpref1,                           │                  mp_reach1, origin1, aspath1, med1, localpref1,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)                │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)               
                                                                                         │                                                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{})                                    
        mp_reach2 := createMpReach("2001::192:168:100:1",                                │          mp_reach2 := createMpReach("::",                                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med2 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                mp_reach2, origin2, aspath2, med2, localpref2,                           │                  mp_reach2, origin2, aspath2, med2, localpref2,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)                │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)               
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          var peer2 *PeerInfo = &PeerInfo{                                                
                                                                                         │                  Address: net.ParseIP("0.0.0.0"),                                        
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 5, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 5, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:100:1"                                         │          expectedNexthop := "::"                                                         
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:1025                                     │ gobgp/internal/pkg/table/table_manager_test.go:424                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000, 65200})                         │          aspath1 := createAsPathAttribute([]uint32{65000})                               
        mp_reach1 := createMpReach("2001::192:168:50:1",                                 │          mp_reach1 := createMpReach("2001::192:168:50:1",                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med1 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                mp_reach1, origin1, aspath1, med1, localpref1,                           │                  mp_reach1, origin1, aspath1, med1, localpref1,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)                │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)               
                                                                                         │                                                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65200})                         │          aspath2 := createAsPathAttribute([]uint32{})                                    
        mp_reach2 := createMpReach("2001::192:168:100:1",                                │          mp_reach2 := createMpReach("::",                                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med2 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                mp_reach2, origin2, aspath2, med2, localpref2,                           │                  mp_reach2, origin2, aspath2, med2, localpref2,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)                │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)               
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          var peer2 *PeerInfo = &PeerInfo{                                                
                                                                                         │                  Address: net.ParseIP("0.0.0.0"),                                        
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 5, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 5, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:100:1"                                         │          expectedNexthop := "::"                                                         
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:1190                                     │ gobgp/internal/pkg/table/table_manager_test.go:424                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000, 65200})                         │          aspath1 := createAsPathAttribute([]uint32{65000})                               
        mp_reach1 := createMpReach("2001::192:168:50:1",                                 │          mp_reach1 := createMpReach("2001::192:168:50:1",                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med1 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                mp_reach1, origin1, aspath1, med1, localpref1,                           │                  mp_reach1, origin1, aspath1, med1, localpref1,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)                │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)               
                                                                                         │                                                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65200})                         │          aspath2 := createAsPathAttribute([]uint32{})                                    
        mp_reach2 := createMpReach("2001::192:168:100:1",                                │          mp_reach2 := createMpReach("::",                                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med2 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                mp_reach2, origin2, aspath2, med2, localpref2,                           │                  mp_reach2, origin2, aspath2, med2, localpref2,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)                │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)               
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer3 := peerR3()                                                                │          var peer2 *PeerInfo = &PeerInfo{                                                
        pList, err = tm.ProcessUpdate(peer3, bgpMessage2)                                │                  Address: net.ParseIP("0.0.0.0"),                                        
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
                                                                                         │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 5, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 5, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:100:1"                                         │          expectedNexthop := "::"                                                         
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:863                                      │ gobgp/internal/pkg/table/table_manager_test.go:701                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(1)                                        
        aspath1 := createAsPathAttribute([]uint32{65200, 65000})                         │          aspath1 := createAsPathAttribute([]uint32{65200, 65000})                        
        mp_reach1 := createMpReach("2001::192:168:50:1",                                 │          mp_reach1 := createMpReach("2001::192:168:50:1",                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med1 := bgp.NewPathAttributeMultiExitDisc(500)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                mp_reach1, origin1, aspath1, med1, localpref1,                           │                  mp_reach1, origin1, aspath1, med1, localpref1,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)                │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)               
                                                                                         │                                                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65000})                        
        mp_reach2 := createMpReach("2001::192:168:100:1",                                │          mp_reach2 := createMpReach("2001::192:168:100:1",                               
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med2 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(200)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                mp_reach2, origin2, aspath2, med2, localpref2,                           │                  mp_reach2, origin2, aspath2, med2, localpref2,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)                │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)               
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 5, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 5, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:100:1"                                         │          expectedNexthop := "2001::192:168:100:1"                                        
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:1025                                     │ gobgp/internal/pkg/table/table_manager_test.go:701                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(1)                                        
        aspath1 := createAsPathAttribute([]uint32{65000, 65200})                         │          aspath1 := createAsPathAttribute([]uint32{65200, 65000})                        
        mp_reach1 := createMpReach("2001::192:168:50:1",                                 │          mp_reach1 := createMpReach("2001::192:168:50:1",                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med1 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                mp_reach1, origin1, aspath1, med1, localpref1,                           │                  mp_reach1, origin1, aspath1, med1, localpref1,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)                │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)               
                                                                                         │                                                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65200})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65000})                        
        mp_reach2 := createMpReach("2001::192:168:100:1",                                │          mp_reach2 := createMpReach("2001::192:168:100:1",                               
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med2 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(200)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                mp_reach2, origin2, aspath2, med2, localpref2,                           │                  mp_reach2, origin2, aspath2, med2, localpref2,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)                │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)               
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 5, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 5, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:100:1"                                         │          expectedNexthop := "2001::192:168:100:1"                                        
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:1190                                     │ gobgp/internal/pkg/table/table_manager_test.go:701                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(1)                                        
        aspath1 := createAsPathAttribute([]uint32{65000, 65200})                         │          aspath1 := createAsPathAttribute([]uint32{65200, 65000})                        
        mp_reach1 := createMpReach("2001::192:168:50:1",                                 │          mp_reach1 := createMpReach("2001::192:168:50:1",                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med1 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                mp_reach1, origin1, aspath1, med1, localpref1,                           │                  mp_reach1, origin1, aspath1, med1, localpref1,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)                │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)               
                                                                                         │                                                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65200})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65000})                        
        mp_reach2 := createMpReach("2001::192:168:100:1",                                │          mp_reach2 := createMpReach("2001::192:168:100:1",                               
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med2 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(200)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                mp_reach2, origin2, aspath2, med2, localpref2,                           │                  mp_reach2, origin2, aspath2, med2, localpref2,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)                │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)               
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer3 := peerR3()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer3, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 5, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 5, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:100:1"                                         │          expectedNexthop := "2001::192:168:100:1"                                        
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:1025                                     │ gobgp/internal/pkg/table/table_manager_test.go:863                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000, 65200})                         │          aspath1 := createAsPathAttribute([]uint32{65200, 65000})                        
        mp_reach1 := createMpReach("2001::192:168:50:1",                                 │          mp_reach1 := createMpReach("2001::192:168:50:1",                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med1 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(500)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                mp_reach1, origin1, aspath1, med1, localpref1,                           │                  mp_reach1, origin1, aspath1, med1, localpref1,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)                │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)               
                                                                                         │                                                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65200})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65000})                        
        mp_reach2 := createMpReach("2001::192:168:100:1",                                │          mp_reach2 := createMpReach("2001::192:168:100:1",                               
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med2 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                mp_reach2, origin2, aspath2, med2, localpref2,                           │                  mp_reach2, origin2, aspath2, med2, localpref2,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)                │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)               
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 5, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 5, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:100:1"                                         │          expectedNexthop := "2001::192:168:100:1"                                        
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:1190                                     │ gobgp/internal/pkg/table/table_manager_test.go:863                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000, 65200})                         │          aspath1 := createAsPathAttribute([]uint32{65200, 65000})                        
        mp_reach1 := createMpReach("2001::192:168:50:1",                                 │          mp_reach1 := createMpReach("2001::192:168:50:1",                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med1 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(500)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                mp_reach1, origin1, aspath1, med1, localpref1,                           │                  mp_reach1, origin1, aspath1, med1, localpref1,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)                │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)               
                                                                                         │                                                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65200})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65000})                        
        mp_reach2 := createMpReach("2001::192:168:100:1",                                │          mp_reach2 := createMpReach("2001::192:168:100:1",                               
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med2 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                mp_reach2, origin2, aspath2, med2, localpref2,                           │                  mp_reach2, origin2, aspath2, med2, localpref2,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)                │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)               
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer3 := peerR3()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer3, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 5, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 5, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:100:1"                                         │          expectedNexthop := "2001::192:168:100:1"                                        
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:1190                                     │ gobgp/internal/pkg/table/table_manager_test.go:1025                                      
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000, 65200})                         │          aspath1 := createAsPathAttribute([]uint32{65000, 65200})                        
        mp_reach1 := createMpReach("2001::192:168:50:1",                                 │          mp_reach1 := createMpReach("2001::192:168:50:1",                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med1 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                mp_reach1, origin1, aspath1, med1, localpref1,                           │                  mp_reach1, origin1, aspath1, med1, localpref1,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)                │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)               
                                                                                         │                                                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65200})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65200})                        
        mp_reach2 := createMpReach("2001::192:168:100:1",                                │          mp_reach2 := createMpReach("2001::192:168:100:1",                               
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med2 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                mp_reach2, origin2, aspath2, med2, localpref2,                           │                  mp_reach2, origin2, aspath2, med2, localpref2,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)                │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)               
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer3 := peerR3()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer3, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 5, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 5, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:100:1"                                         │          expectedNexthop := "2001::192:168:100:1"                                        
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:260                                      │ gobgp/internal/pkg/table/table_manager_test.go:424                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000})                                │          aspath1 := createAsPathAttribute([]uint32{65000})                               
        mp_reach1 := createMpReach("2001::192:168:50:1",                                 │          mp_reach1 := createMpReach("2001::192:168:50:1",                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med1 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                mp_reach1, origin1, aspath1, med1, localpref1,                           │                  mp_reach1, origin1, aspath1, med1, localpref1,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)                │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)               
                                                                                         │                                                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{})                                    
        mp_reach2 := createMpReach("2001::192:168:100:1",                                │          mp_reach2 := createMpReach("::",                                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(200)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                mp_reach2, origin2, aspath2, med2, localpref2,                           │                  mp_reach2, origin2, aspath2, med2, localpref2,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)                │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)               
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          var peer2 *PeerInfo = &PeerInfo{                                                
                                                                                         │                  Address: net.ParseIP("0.0.0.0"),                                        
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 5, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 5, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:100:1"                                         │          expectedNexthop := "::"                                                         
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:260                                      │ gobgp/internal/pkg/table/table_manager_test.go:701                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(1)                                        
        aspath1 := createAsPathAttribute([]uint32{65000})                                │          aspath1 := createAsPathAttribute([]uint32{65200, 65000})                        
        mp_reach1 := createMpReach("2001::192:168:50:1",                                 │          mp_reach1 := createMpReach("2001::192:168:50:1",                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med1 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                mp_reach1, origin1, aspath1, med1, localpref1,                           │                  mp_reach1, origin1, aspath1, med1, localpref1,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)                │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)               
                                                                                         │                                                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65000})                        
        mp_reach2 := createMpReach("2001::192:168:100:1",                                │          mp_reach2 := createMpReach("2001::192:168:100:1",                               
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(200)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(200)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                mp_reach2, origin2, aspath2, med2, localpref2,                           │                  mp_reach2, origin2, aspath2, med2, localpref2,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)                │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)               
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 5, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 5, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:100:1"                                         │          expectedNexthop := "2001::192:168:100:1"                                        
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:260                                      │ gobgp/internal/pkg/table/table_manager_test.go:863                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000})                                │          aspath1 := createAsPathAttribute([]uint32{65200, 65000})                        
        mp_reach1 := createMpReach("2001::192:168:50:1",                                 │          mp_reach1 := createMpReach("2001::192:168:50:1",                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med1 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(500)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                mp_reach1, origin1, aspath1, med1, localpref1,                           │                  mp_reach1, origin1, aspath1, med1, localpref1,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)                │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)               
                                                                                         │                                                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65000})                        
        mp_reach2 := createMpReach("2001::192:168:100:1",                                │          mp_reach2 := createMpReach("2001::192:168:100:1",                               
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(200)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                mp_reach2, origin2, aspath2, med2, localpref2,                           │                  mp_reach2, origin2, aspath2, med2, localpref2,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)                │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)               
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 5, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 5, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:100:1"                                         │          expectedNexthop := "2001::192:168:100:1"                                        
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:260                                      │ gobgp/internal/pkg/table/table_manager_test.go:1025                                      
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000})                                │          aspath1 := createAsPathAttribute([]uint32{65000, 65200})                        
        mp_reach1 := createMpReach("2001::192:168:50:1",                                 │          mp_reach1 := createMpReach("2001::192:168:50:1",                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med1 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                mp_reach1, origin1, aspath1, med1, localpref1,                           │                  mp_reach1, origin1, aspath1, med1, localpref1,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)                │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)               
                                                                                         │                                                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65200})                        
        mp_reach2 := createMpReach("2001::192:168:100:1",                                │          mp_reach2 := createMpReach("2001::192:168:100:1",                               
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(200)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                mp_reach2, origin2, aspath2, med2, localpref2,                           │                  mp_reach2, origin2, aspath2, med2, localpref2,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)                │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)               
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 5, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 5, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:100:1"                                         │          expectedNexthop := "2001::192:168:100:1"                                        
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:260                                      │ gobgp/internal/pkg/table/table_manager_test.go:1190                                      
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000})                                │          aspath1 := createAsPathAttribute([]uint32{65000, 65200})                        
        mp_reach1 := createMpReach("2001::192:168:50:1",                                 │          mp_reach1 := createMpReach("2001::192:168:50:1",                                
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med1 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                mp_reach1, origin1, aspath1, med1, localpref1,                           │                  mp_reach1, origin1, aspath1, med1, localpref1,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)                │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nil)               
                                                                                         │                                                                                          
        origin2 := bgp.NewPathAttributeOrigin(0)                                         │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        aspath2 := createAsPathAttribute([]uint32{65100, 65000})                         │          aspath2 := createAsPathAttribute([]uint32{65100, 65200})                        
        mp_reach2 := createMpReach("2001::192:168:100:1",                                │          mp_reach2 := createMpReach("2001::192:168:100:1",                               
                []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")} │                  []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::")}
        med2 := bgp.NewPathAttributeMultiExitDisc(100)                                   │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref2 := bgp.NewPathAttributeLocalPref(200)                                 │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes2 := []bgp.PathAttributeInterface{                                 │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                mp_reach2, origin2, aspath2, med2, localpref2,                           │                  mp_reach2, origin2, aspath2, med2, localpref2,                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)                │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nil)               
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        peer2 := peerR2()                                                                │          peer3 := peerR3()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer3, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 5, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 5, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:100:1"                                         │          expectedNexthop := "2001::192:168:100:1"                                        
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/config/bgp_configs.go:4716                                           │ gobgp/internal/pkg/config/bgp_configs.go:4671                                            
                                                                                         │                                                                                          
        // original -> bgp-mp:always-compare-med                                         │          // original -> bgp-mp:always-compare-med                                        
        // bgp-mp:always-compare-med's original type is boolean.                         │          // bgp-mp:always-compare-med's original type is boolean.                        
        // Compare multi-exit discriminator (MED) value from                             │          // Compare multi-exit discriminator (MED) value from                            
        // different ASes when selecting the best route.  The                            │          // different ASes when selecting the best route.  The                           
        // default behavior is to only compare MEDs for paths                            │          // default behavior is to only compare MEDs for paths                           
        // received from the same AS.                                                    │          // received from the same AS.                                                   
        AlwaysCompareMed bool `mapstructure:"always-compare-med" json:"always-compare-me │          AlwaysCompareMed bool `mapstructure:"always-compare-med" json:"always-compare-me
        // original -> bgp-mp:ignore-as-path-length                                      │          // original -> bgp-mp:ignore-as-path-length                                     
        // bgp-mp:ignore-as-path-length's original type is boolean.                      │          // bgp-mp:ignore-as-path-length's original type is boolean.                     
        // Ignore the AS path length when selecting the best path.                       │          // Ignore the AS path length when selecting the best path.                      
        // The default is to use the AS path length and prefer paths                     │          // The default is to use the AS path length and prefer paths                    
        // with shorter length.                                                          │          // with shorter length.                                                         
        IgnoreAsPathLength bool `mapstructure:"ignore-as-path-length" json:"ignore-as-pa │          IgnoreAsPathLength bool `mapstructure:"ignore-as-path-length" json:"ignore-as-pa
        // original -> bgp-mp:external-compare-router-id                                 │          // original -> bgp-mp:external-compare-router-id                                
        // bgp-mp:external-compare-router-id's original type is boolean.                 │          // bgp-mp:external-compare-router-id's original type is boolean.                
        // When comparing similar routes received from external                          │          // When comparing similar routes received from external                         
        // BGP peers, use the router-id as a criterion to select                         │          // BGP peers, use the router-id as a criterion to select                        
        // the active path.                                                              │          // the active path.                                                             
        ExternalCompareRouterId bool `mapstructure:"external-compare-router-id" json:"ex │          ExternalCompareRouterId bool `mapstructure:"external-compare-router-id" json:"ex
        // original -> bgp-mp:advertise-inactive-routes                                  │          // original -> bgp-mp:advertise-inactive-routes                                 
        // bgp-mp:advertise-inactive-routes's original type is boolean.                  │          // bgp-mp:advertise-inactive-routes's original type is boolean.                 
        // Advertise inactive routes to external peers.  The                             │          // Advertise inactive routes to external peers.  The                            
        // default is to only advertise active routes.                                   │          // default is to only advertise active routes.                                  
        AdvertiseInactiveRoutes bool `mapstructure:"advertise-inactive-routes" json:"adv │          AdvertiseInactiveRoutes bool `mapstructure:"advertise-inactive-routes" json:"adv
        // original -> bgp-mp:enable-aigp                                                │          // original -> bgp-mp:enable-aigp                                               
        // bgp-mp:enable-aigp's original type is boolean.                                │          // bgp-mp:enable-aigp's original type is boolean.                               
        // Flag to enable sending / receiving accumulated IGP                            │          // Flag to enable sending / receiving accumulated IGP                           
        // attribute in routing updates.                                                 │          // attribute in routing updates.                                                
        EnableAigp bool `mapstructure:"enable-aigp" json:"enable-aigp,omitempty"`        │          EnableAigp bool `mapstructure:"enable-aigp" json:"enable-aigp,omitempty"`       
        // original -> bgp-mp:ignore-next-hop-igp-metric                                 │          // original -> bgp-mp:ignore-next-hop-igp-metric                                
        // bgp-mp:ignore-next-hop-igp-metric's original type is boolean.                 │          // bgp-mp:ignore-next-hop-igp-metric's original type is boolean.                
        // Ignore the IGP metric to the next-hop when calculating                        │          // Ignore the IGP metric to the next-hop when calculating                       
        // BGP best-path. The default is to select the route for                         │          // BGP best-path. The default is to select the route for                        
        // which the metric to the next-hop is lowest.                                   │          // which the metric to the next-hop is lowest.                                  
        IgnoreNextHopIgpMetric bool `mapstructure:"ignore-next-hop-igp-metric" json:"ign │          IgnoreNextHopIgpMetric bool `mapstructure:"ignore-next-hop-igp-metric" json:"ign
        // original -> gobgp:disable-best-path-selection                                 │          // original -> gobgp:disable-best-path-selection                                
        // gobgp:disable-best-path-selection's original type is boolean.                 │          // gobgp:disable-best-path-selection's original type is boolean.                
        // Disables best path selection process.                                         │          // Disables best path selection process.                                        
        DisableBestPathSelection bool `mapstructure:"disable-best-path-selection" json:" │          DisableBestPathSelection bool `mapstructure:"disable-best-path-selection" json:"
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:1503                                     │ gobgp/internal/pkg/table/table_manager_test.go:945                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // path1                                                                         │          // low origin message                                                           
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000})                                │          aspath1 := createAsPathAttribute([]uint32{65000, 65200})                        
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(200)                                  
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // path 1 withdraw                                                               │          // high origin message                                                          
        w1 := bgp.NewIPAddrPrefix(24, "10.10.10.0")                                      │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        w := []*bgp.IPAddrPrefix{w1}                                                     │          aspath2 := createAsPathAttribute([]uint32{65100, 65000})                        
        bgpMessage1_w := bgp.NewBGPUpdateMessage(w, nil, nil)                            │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.100.1")                        
                                                                                         │          med2 := bgp.NewPathAttributeMultiExitDisc(200)                                  
                                                                                         │          localpref2 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
                                                                                         │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                                                                                         │                  origin2, aspath2, nexthop2, med2, localpref2,                           
                                                                                         │          }                                                                               
                                                                                         │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
                                                                                         │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        pList, err = tm.ProcessUpdate(peer1, bgpMessage1_w)                              │          peer2 := peerR2()                                                               
                                                                                         │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, true)                                       │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check old best path                                                           │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        checkPattr := func(expected *bgp.BGPMessage, actual *Path) {                     │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                pathAttributes := expected.Body.(*bgp.BGPUpdate).PathAttributes          │          expectedOrigin := pathAttributes[0]                                             
                expectedOrigin := pathAttributes[0]                                      │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
                attr := actual.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                     │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
                pathOrigin := attr.(*bgp.PathAttributeOrigin)                            │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                assert.Equal(t, expectedOrigin, pathOrigin)                              │                                                                                          
                                                                                         │          expectedAsPath := pathAttributes[1]                                             
                expectedAsPath := pathAttributes[1]                                      │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
                attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                     │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
                pathAspath := attr.(*bgp.PathAttributeAsPath)                            │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                assert.Equal(t, expectedAsPath, pathAspath)                              │                                                                                          
                                                                                         │          expectedNexthopAttr := pathAttributes[2]                                        
                expectedNexthopAttr := pathAttributes[2]                                 │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
                attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                    │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
                pathNexthop := attr.(*bgp.PathAttributeNextHop)                          │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                assert.Equal(t, expectedNexthopAttr, pathNexthop)                        │                                                                                          
                                                                                         │          expectedMed := pathAttributes[3]                                                
                expectedMed := pathAttributes[3]                                         │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
                attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)             │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
                pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                        │          assert.Equal(t, expectedMed, pathMed)                                           
                assert.Equal(t, expectedMed, pathMed)                                    │                                                                                          
                                                                                         │                                                                                          
                // check PathAttribute length                                            │          // check PathAttribute length                                                   
                assert.Equal(t, len(pathAttributes), len(path.GetPathAttrs()))           │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
        }                                                                                │                                                                                          
                                                                                         │                                                                                          
        checkPattr(bgpMessage1, path)                                                    │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
                                                                                         │          // check nexthop                                                                
                                                                                         │          expectedNexthop := "192.168.100.1"                                              
                                                                                         │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:1503                                     │ gobgp/internal/pkg/table/table_manager_test.go:180                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        // path1                                                                         │          // low localpref message                                                        
        origin1 := bgp.NewPathAttributeOrigin(0)                                         │          origin1 := bgp.NewPathAttributeOrigin(0)                                        
        aspath1 := createAsPathAttribute([]uint32{65000})                                │          aspath1 := createAsPathAttribute([]uint32{65000})                               
        nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                          │          nexthop1 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
        med1 := bgp.NewPathAttributeMultiExitDisc(200)                                   │          med1 := bgp.NewPathAttributeMultiExitDisc(0)                                    
        localpref1 := bgp.NewPathAttributeLocalPref(100)                                 │          localpref1 := bgp.NewPathAttributeLocalPref(100)                                
                                                                                         │                                                                                          
        pathAttributes1 := []bgp.PathAttributeInterface{                                 │          pathAttributes1 := []bgp.PathAttributeInterface{                                
                origin1, aspath1, nexthop1, med1, localpref1,                            │                  origin1, aspath1, nexthop1, med1, localpref1,                           
        }                                                                                │          }                                                                               
        nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              │          nlri1 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
        bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)              │          bgpMessage1 := bgp.NewBGPUpdateMessage(nil, pathAttributes1, nlri1)             
                                                                                         │                                                                                          
        // path 1 withdraw                                                               │          // high localpref message                                                       
        w1 := bgp.NewIPAddrPrefix(24, "10.10.10.0")                                      │          origin2 := bgp.NewPathAttributeOrigin(0)                                        
        w := []*bgp.IPAddrPrefix{w1}                                                     │          aspath2 := createAsPathAttribute([]uint32{65100, 65000})                        
        bgpMessage1_w := bgp.NewBGPUpdateMessage(w, nil, nil)                            │          nexthop2 := bgp.NewPathAttributeNextHop("192.168.50.1")                         
                                                                                         │          med2 := bgp.NewPathAttributeMultiExitDisc(100)                                  
                                                                                         │          localpref2 := bgp.NewPathAttributeLocalPref(200)                                
                                                                                         │                                                                                          
                                                                                         │          pathAttributes2 := []bgp.PathAttributeInterface{                                
                                                                                         │                  origin2, aspath2, nexthop2, med2, localpref2,                           
                                                                                         │          }                                                                               
                                                                                         │          nlri2 := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}             
                                                                                         │          bgpMessage2 := bgp.NewBGPUpdateMessage(nil, pathAttributes2, nlri2)             
                                                                                         │                                                                                          
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        pList, err = tm.ProcessUpdate(peer1, bgpMessage1_w)                              │          peer2 := peerR2()                                                               
                                                                                         │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, true)                                       │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check old best path                                                           │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        checkPattr := func(expected *bgp.BGPMessage, actual *Path) {                     │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                pathAttributes := expected.Body.(*bgp.BGPUpdate).PathAttributes          │          expectedOrigin := pathAttributes[0]                                             
                expectedOrigin := pathAttributes[0]                                      │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
                attr := actual.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                     │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
                pathOrigin := attr.(*bgp.PathAttributeOrigin)                            │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                assert.Equal(t, expectedOrigin, pathOrigin)                              │                                                                                          
                                                                                         │          expectedAsPath := pathAttributes[1]                                             
                expectedAsPath := pathAttributes[1]                                      │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
                attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                     │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
                pathAspath := attr.(*bgp.PathAttributeAsPath)                            │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                assert.Equal(t, expectedAsPath, pathAspath)                              │                                                                                          
                                                                                         │          expectedNexthopAttr := pathAttributes[2]                                        
                expectedNexthopAttr := pathAttributes[2]                                 │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
                attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                    │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
                pathNexthop := attr.(*bgp.PathAttributeNextHop)                          │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                assert.Equal(t, expectedNexthopAttr, pathNexthop)                        │                                                                                          
                                                                                         │          expectedMed := pathAttributes[3]                                                
                expectedMed := pathAttributes[3]                                         │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
                attr = actual.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)             │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
                pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                        │          assert.Equal(t, expectedMed, pathMed)                                           
                assert.Equal(t, expectedMed, pathMed)                                    │                                                                                          
                                                                                         │                                                                                          
                // check PathAttribute length                                            │          // check PathAttribute length                                                   
                assert.Equal(t, len(pathAttributes), len(path.GetPathAttrs()))           │          assert.Equal(t, len(pathAttributes2), len(path.GetPathAttrs()))                 
        }                                                                                │                                                                                          
                                                                                         │                                                                                          
        checkPattr(bgpMessage1, path)                                                    │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "10.10.10.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
                                                                                         │          // check nexthop                                                                
                                                                                         │          expectedNexthop := "192.168.50.1"                                               
                                                                                         │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/packet/bgp/bgp_test.go:406                                                    │ gobgp/pkg/packet/bgp/bgp_test.go:505                                                     
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │                                                                                          
        cmp := make([]FlowSpecComponentInterface, 0)                                     │          cmp := make([]FlowSpecComponentInterface, 0)                                    
        cmp = append(cmp, NewFlowSpecDestinationPrefix(NewIPAddrPrefix(24, "10.0.0.0"))) │          cmp = append(cmp, NewFlowSpecDestinationPrefix6(NewIPv6AddrPrefix(64, "2001::"),
        cmp = append(cmp, NewFlowSpecSourcePrefix(NewIPAddrPrefix(24, "10.0.0.0")))      │          cmp = append(cmp, NewFlowSpecSourcePrefix6(NewIPv6AddrPrefix(64, "2001::"), 12))
        item1 := NewFlowSpecComponentItem(DEC_NUM_OP_EQ, TCP)                            │          item1 := NewFlowSpecComponentItem(DEC_NUM_OP_EQ, TCP)                           
        cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_IP_PROTO, []*FlowSpecCompo │          cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_IP_PROTO, []*FlowSpecCompo
        item2 := NewFlowSpecComponentItem(DEC_NUM_OP_GT_EQ, 20)                          │          item2 := NewFlowSpecComponentItem(DEC_NUM_OP_GT_EQ, 20)                         
        item3 := NewFlowSpecComponentItem(DEC_NUM_OP_AND|DEC_NUM_OP_LT_EQ, 30)           │          item3 := NewFlowSpecComponentItem(DEC_NUM_OP_AND|DEC_NUM_OP_LT_EQ, 30)          
        item4 := NewFlowSpecComponentItem(DEC_NUM_OP_GT_EQ, 10)                          │          item4 := NewFlowSpecComponentItem(DEC_NUM_OP_EQ, 10)                            
        cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_PORT, []*FlowSpecComponent │          cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_PORT, []*FlowSpecComponent
        cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_DST_PORT, []*FlowSpecCompo │          cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_DST_PORT, []*FlowSpecCompo
        cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_SRC_PORT, []*FlowSpecCompo │          cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_SRC_PORT, []*FlowSpecCompo
        cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_ICMP_TYPE, []*FlowSpecComp │          cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_ICMP_TYPE, []*FlowSpecComp
        cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_ICMP_CODE, []*FlowSpecComp │          cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_ICMP_CODE, []*FlowSpecComp
        cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_PKT_LEN, []*FlowSpecCompon │          cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_PKT_LEN, []*FlowSpecCompon
        cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_DSCP, []*FlowSpecComponent │          cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_DSCP, []*FlowSpecComponent
                                                                                         │          cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_LABEL, []*FlowSpecComponen
        isFragment := uint64(0x02)                                                       │          isFragment := uint64(0x02)                                                      
        lastFragment := uint64(0x08)                                                     │                                                                                          
        item5 := NewFlowSpecComponentItem(BITMASK_FLAG_OP_MATCH, isFragment)             │          item5 := NewFlowSpecComponentItem(BITMASK_FLAG_OP_MATCH, isFragment)            
        item6 := NewFlowSpecComponentItem(BITMASK_FLAG_OP_AND, lastFragment)             │          cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_FRAGMENT, []*FlowSpecCompo
                                                                                         │          item6 := NewFlowSpecComponentItem(0, TCP_FLAG_ACK)                              
        cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_FRAGMENT, []*FlowSpecCompo │          item7 := NewFlowSpecComponentItem(BITMASK_FLAG_OP_AND|BITMASK_FLAG_OP_NOT, TCP_F
        item7 := NewFlowSpecComponentItem(0, TCP_FLAG_ACK)                               │          cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_TCP_FLAG, []*FlowSpecCompo
        item8 := NewFlowSpecComponentItem(BITMASK_FLAG_OP_AND|BITMASK_FLAG_OP_NOT, TCP_F │          n1 := NewFlowSpecIPv6Unicast(cmp)                                               
                                                                                         │                                                                                          
        cmp = append(cmp, NewFlowSpecComponent(FLOW_SPEC_TYPE_TCP_FLAG, []*FlowSpecCompo │                                                                                          
        n1 := NewFlowSpecIPv4Unicast(cmp)                                                │                                                                                          
                                                                                         │                                                                                          
        buf1, err := n1.Serialize()                                                      │          buf1, err := n1.Serialize()                                                     
        assert.Nil(err)                                                                  │          require.NoError(t, err)                                                         
                                                                                         │                                                                                          
        n2, err := NewPrefixFromRouteFamily(RouteFamilyToAfiSafi(RF_FS_IPv4_UC))         │          n2, err := NewPrefixFromRouteFamily(RouteFamilyToAfiSafi(RF_FS_IPv6_UC))        
        assert.Nil(err)                                                                  │          require.NoError(t, err)                                                         
                                                                                         │                                                                                          
        err = n2.DecodeFromBytes(buf1)                                                   │          err = n2.DecodeFromBytes(buf1)                                                  
        assert.Nil(err)                                                                  │          require.NoError(t, err)                                                         
        // should be equal                                                               │                                                                                          
        assert.Equal(n1, n2)                                                             │          _, err = n2.Serialize()                                                         
                                                                                         │          require.NoError(t, err)                                                         
                                                                                         │                                                                                          
                                                                                         │          assert.Equal(t, n1, n2)                                                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/config/bgp_configs.go:1769                                           │ gobgp/internal/pkg/config/bgp_configs.go:1719                                            
                                                                                         │                                                                                          
        // original -> bgp:peer-as                                                       │          // original -> bgp:peer-as                                                      
        // bgp:peer-as's original type is inet:as-number.                                │          // bgp:peer-as's original type is inet:as-number.                               
        // AS number of the peer.                                                        │          // AS number of the peer.                                                       
        PeerAs uint32 `mapstructure:"peer-as" json:"peer-as,omitempty"`                  │          PeerAs uint32 `mapstructure:"peer-as" json:"peer-as,omitempty"`                 
        // original -> bgp:local-as                                                      │          // original -> bgp:local-as                                                     
        // bgp:local-as's original type is inet:as-number.                               │          // bgp:local-as's original type is inet:as-number.                              
        // The local autonomous system number that is to be used                         │          // The local autonomous system number that is to be used                        
        // when establishing sessions with the remote peer or peer                       │          // when establishing sessions with the remote peer or peer                      
        // group, if this differs from the global BGP router                             │          // group, if this differs from the global BGP router                            
        // autonomous system number.                                                     │          // autonomous system number.                                                    
        LocalAs uint32 `mapstructure:"local-as" json:"local-as,omitempty"`               │          LocalAs uint32 `mapstructure:"local-as" json:"local-as,omitempty"`              
        // original -> bgp:peer-type                                                     │          // original -> bgp:peer-type                                                    
        // Explicitly designate the peer or peer group as internal                       │          // Explicitly designate the peer or peer group as internal                      
        // (iBGP) or external (eBGP).                                                    │          // (iBGP) or external (eBGP).                                                   
        PeerType PeerType `mapstructure:"peer-type" json:"peer-type,omitempty"`          │          PeerType PeerType `mapstructure:"peer-type" json:"peer-type,omitempty"`         
        // original -> bgp:auth-password                                                 │          // original -> bgp:auth-password                                                
        // Configures an MD5 authentication password for use with                        │          // Configures an MD5 authentication password for use with                       
        // neighboring devices.                                                          │          // neighboring devices.                                                         
        AuthPassword string `mapstructure:"auth-password" json:"auth-password,omitempty" │          AuthPassword string `mapstructure:"auth-password" json:"auth-password,omitempty"
        // original -> bgp:remove-private-as                                             │          // original -> bgp:remove-private-as                                            
        // Remove private AS numbers from updates sent to peers.                         │          // Remove private AS numbers from updates sent to peers.                        
        RemovePrivateAs RemovePrivateAsOption `mapstructure:"remove-private-as" json:"re │          RemovePrivateAs RemovePrivateAsOption `mapstructure:"remove-private-as" json:"re
        // original -> bgp:route-flap-damping                                            │          // original -> bgp:route-flap-damping                                           
        // bgp:route-flap-damping's original type is boolean.                            │          // bgp:route-flap-damping's original type is boolean.                           
        // Enable route flap damping.                                                    │          // Enable route flap damping.                                                   
        RouteFlapDamping bool `mapstructure:"route-flap-damping" json:"route-flap-dampin │          RouteFlapDamping bool `mapstructure:"route-flap-damping" json:"route-flap-dampin
        // original -> bgp:send-community                                                │          // original -> bgp:send-community                                               
        // Specify which types of community should be sent to the                        │          // Specify which types of community should be sent to the                       
        // neighbor or group. The default is to not send the                             │          // neighbor or group. The default is to not send the                            
        // community attribute.                                                          │          // community attribute.                                                         
        SendCommunity CommunityType `mapstructure:"send-community" json:"send-community, │          SendCommunity CommunityType `mapstructure:"send-community" json:"send-community,
        // original -> bgp:description                                                   │          // original -> bgp:description                                                  
        // An optional textual description (intended primarily for use                   │          // An optional textual description (intended primarily for use                  
        // with a peer or group.                                                         │          // with a peer or group.                                                        
        Description string `mapstructure:"description" json:"description,omitempty"`     │          Description string `mapstructure:"description" json:"description,omitempty"`    
        // original -> bgp:peer-group-name                                               │          // original -> bgp:peer-group-name                                              
        // Name of the BGP peer-group.                                                   │          // Name of the BGP peer-group.                                                  
        PeerGroupName string `mapstructure:"peer-group-name" json:"peer-group-name,omite │          PeerGroupName string `mapstructure:"peer-group-name" json:"peer-group-name,omite
                                                                                         │          // original -> bgp-op:total-paths                                               
                                                                                         │          // Total number of BGP paths within the context.                                
                                                                                         │          TotalPaths uint32 `mapstructure:"total-paths" json:"total-paths,omitempty"`     
                                                                                         │          // original -> bgp-op:total-prefixes                                            
                                                                                         │          // .                                                                            
                                                                                         │          TotalPrefixes uint32 `mapstructure:"total-prefixes" json:"total-prefixes,omitemp
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/config/bgp_configs.go:2931                                           │ gobgp/internal/pkg/config/bgp_configs.go:2851                                            
                                                                                         │                                                                                          
        // original -> bgp-op:UPDATE                                                     │          // original -> bgp-op:UPDATE                                                    
        // Number of BGP UPDATE messages announcing, withdrawing                         │          // Number of BGP UPDATE messages announcing, withdrawing                        
        // or modifying paths exchanged.                                                 │          // or modifying paths exchanged.                                                
        Update uint64 `mapstructure:"update" json:"update,omitempty"`                    │          Update uint64 `mapstructure:"update" json:"update,omitempty"`                   
        // original -> bgp-op:NOTIFICATION                                               │          // original -> bgp-op:NOTIFICATION                                              
        // Number of BGP NOTIFICATION messages indicating an                             │          // Number of BGP NOTIFICATION messages indicating an                            
        // error condition has occurred exchanged.                                       │          // error condition has occurred exchanged.                                      
        Notification uint64 `mapstructure:"notification" json:"notification,omitempty"`  │          Notification uint64 `mapstructure:"notification" json:"notification,omitempty"` 
        // original -> gobgp:OPEN                                                        │          // original -> gobgp:OPEN                                                       
        // Number of BGP open messages announcing, withdrawing                           │          // Number of BGP open messages announcing, withdrawing                          
        // or modifying paths exchanged.                                                 │          // or modifying paths exchanged.                                                
        Open uint64 `mapstructure:"open" json:"open,omitempty"`                          │          Open uint64 `mapstructure:"open" json:"open,omitempty"`                         
        // original -> gobgp:REFRESH                                                     │          // original -> gobgp:REFRESH                                                    
        // Number of BGP Route-Refresh messages indicating an                            │          // Number of BGP Route-Refresh messages indicating an                           
        // error condition has occurred exchanged.                                       │          // error condition has occurred exchanged.                                      
        Refresh uint64 `mapstructure:"refresh" json:"refresh,omitempty"`                 │          Refresh uint64 `mapstructure:"refresh" json:"refresh,omitempty"`                
        // original -> gobgp:KEEPALIVE                                                   │          // original -> gobgp:KEEPALIVE                                                  
        // Number of BGP Keepalive messages indicating an                                │          // Number of BGP Keepalive messages indicating an                               
        // error condition has occurred exchanged.                                       │          // error condition has occurred exchanged.                                      
        Keepalive uint64 `mapstructure:"keepalive" json:"keepalive,omitempty"`           │          Keepalive uint64 `mapstructure:"keepalive" json:"keepalive,omitempty"`          
        // original -> gobgp:DYNAMIC-CAP                                                 │          // original -> gobgp:DYNAMIC-CAP                                                
        // Number of BGP dynamic-cap messages indicating an                              │          // Number of BGP dynamic-cap messages indicating an                             
        // error condition has occurred exchanged.                                       │          // error condition has occurred exchanged.                                      
        DynamicCap uint64 `mapstructure:"dynamic-cap" json:"dynamic-cap,omitempty"`      │          DynamicCap uint64 `mapstructure:"dynamic-cap" json:"dynamic-cap,omitempty"`     
        // original -> gobgp:WITHDRAW-UPDATE                                             │          // original -> gobgp:WITHDRAW-UPDATE                                            
        // Number of updates subjected to treat-as-withdraw treatment.                   │          // Number of updates subjected to treat-as-withdraw treatment.                  
        WithdrawUpdate uint32 `mapstructure:"withdraw-update" json:"withdraw-update,omit │          WithdrawUpdate uint32 `mapstructure:"withdraw-update" json:"withdraw-update,omit
        // original -> gobgp:WITHDRAW-PREFIX                                             │          // original -> gobgp:WITHDRAW-PREFIX                                            
        // Number of prefixes subjected to treat-as-withdraw treatment.                  │          // Number of prefixes subjected to treat-as-withdraw treatment.                 
        WithdrawPrefix uint32 `mapstructure:"withdraw-prefix" json:"withdraw-prefix,omit │          WithdrawPrefix uint32 `mapstructure:"withdraw-prefix" json:"withdraw-prefix,omit
        // original -> gobgp:DISCARDED                                                   │          // original -> gobgp:DISCARDED                                                  
        // Number of discarded messages indicating an                                    │          // Number of discarded messages indicating an                                   
        // error condition has occurred exchanged.                                       │          // error condition has occurred exchanged.                                      
        Discarded uint64 `mapstructure:"discarded" json:"discarded,omitempty"`           │          Discarded uint64 `mapstructure:"discarded" json:"discarded,omitempty"`          
        // original -> gobgp:TOTAL                                                       │          // original -> gobgp:TOTAL                                                      
        // Number of total messages indicating an                                        │          // Number of total messages indicating an                                       
        // error condition has occurred exchanged.                                       │          // error condition has occurred exchanged.                                      
        Total uint64 `mapstructure:"total" json:"total,omitempty"`                       │          Total uint64 `mapstructure:"total" json:"total,omitempty"`                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/packet/bgp/bgp_test.go:3179                                                   │ gobgp/pkg/packet/bgp/bgp_test.go:3162                                                    
[]byte{                                                                                  │  []byte{                                                                                 
                        // LS Attribute with all Node-related TLVs.                      │                          // LS Attribute with all Node-related TLVs.                     
                        0x80, 0x29, 0x5d, // Optional attribute, BGP_ATTR_TYPE_LS, corre │                          0x80, 0x29, 0x62, // Optional attribute, BGP_ATTR_TYPE_LS, corre
                        0x04, 0x00, 0x00, 0x01, 0xFF, // Node flags (all set)            │                          0x04, 0x00, 0x00, 0x01, 0xFF, // Node flags (all set)           
                        0x04, 0x01, 0x00, 0x03, 0x01, 0x02, 0x03, // Opaque Node Attr [1 │                          0x04, 0x01, 0x00, 0x03, 0x01, 0x02, 0x03, // Opaque Node Attr [1
                        0x04, 0x02, 0x00, 0x03, 0x72, 0x74, 0x72, // Node name: "rtr"    │                          0x04, 0x02, 0x00, 0x03, 0x72, 0x74, 0x72, // Node name: "rtr"   
                        0x04, 0x03, 0x00, 0x03, 0x72, 0x74, 0x72, // ISIS area: [114 116 │                          0x04, 0x03, 0x00, 0x03, 0x72, 0x74, 0x72, // ISIS area: [114 116
                        0x04, 0x04, 0x00, 0x04, 0x01, 0x01, 0x01, 0x01, // Local RouterI │                          0x04, 0x04, 0x00, 0x04, 0x01, 0x01, 0x01, 0x01, // Local RouterI
                        0x04, 0x05, 0x00, 0x10, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00 │                          0x04, 0x05, 0x00, 0x10, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00
                        0x04, 0x0a, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x88, 0xb8, 0x04, 0x89 │                          0x04, 0x0a, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x88, 0xb8, 0x04, 0x89
                        0x04, 0x0b, 0x00, 0x03, 0x01, 0x02, 0x03, // SR Algorithm [1 2 3 │                          0x04, 0x0b, 0x00, 0x03, 0x01, 0x02, 0x03, // SR ALgorithm [1 2 3
                        0x04, 0x0c, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x88, 0xb8, 0x04, 0x89 │                          0x04, 0x0c, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x88, 0xb8, 0x04, 0x89
                                                                                         │                          0xde, 0xad, 0x00, 0x01, 0xFF, // Unknown TLV                    
                },                                                                       │                  },                                                                      
                        "{LsAttributes: {Node Flags: XXVRBETO} {Opaque attribute: [1 2 3 │                          "{LsAttributes: {Node Flags: XXVRBETO} {Opaque attribute: [1 2 3
                        `{"type":41,"flags":128,"node":{"flags":{"overload":true,"attach │                          `{"type":41,"flags":128,"node":{"flags":{"overload":true,"attach
                        true, false}                                                     │                          false, false                                                    
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:325                                             │ gobgp/internal/pkg/table/policy_test.go:372                                              
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.1.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.1.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.1.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.1.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.1.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.1.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path1 := ProcessMessage(updateMsg, peer, time.Now())[0]                          │          path1 := ProcessMessage(updateMsg, peer, time.Now())[0]                         
                                                                                         │                                                                                          
        peer = &PeerInfo{AS: 65002, Address: net.ParseIP("10.0.2.2")}                    │          peer = &PeerInfo{AS: 65002, Address: net.ParseIP("10.0.2.2")}                   
        origin = bgp.NewPathAttributeOrigin(0)                                           │          origin = bgp.NewPathAttributeOrigin(0)                                          
        aspathParam = []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002})} │          aspathParam = []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002})}
        aspath = bgp.NewPathAttributeAsPath(aspathParam)                                 │          aspath = bgp.NewPathAttributeAsPath(aspathParam)                                
        nexthop = bgp.NewPathAttributeNextHop("10.0.2.2")                                │          nexthop = bgp.NewPathAttributeNextHop("10.0.2.2")                               
        med = bgp.NewPathAttributeMultiExitDisc(0)                                       │          med = bgp.NewPathAttributeMultiExitDisc(0)                                      
        pathAttributes = []bgp.PathAttributeInterface{origin, aspath, nexthop, med}      │          pathAttributes = []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     
        nlri = []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.9.2.102")}                │          nlri = []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.2.102")}              
        updateMsg = bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                   │          updateMsg = bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  
        path2 := ProcessMessage(updateMsg, peer, time.Now())[0]                          │          path2 := ProcessMessage(updateMsg, peer, time.Now())[0]                         
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.1.0/16", "21..24")                           │          ns := createNeighborSet("ns1", "10.0.1.1")                                      
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "", false)                             │          s := createStatement("statement1", "", "ns1", false)                            
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          pType, newPath := r.policyMap["pd1"].Apply(logger, path1, nil)                  
        pType, newPath := p.Apply(logger, path1, nil)                                    │                                                                                          
        assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                       
        assert.Equal(t, newPath, path1)                                                  │          assert.Equal(t, newPath, path1)                                                 
                                                                                         │                                                                                          
        pType2, newPath2 := p.Apply(logger, path2, nil)                                  │          pType2, newPath2 := r.policyMap["pd1"].Apply(logger, path2, nil)                
        assert.Equal(t, ROUTE_TYPE_NONE, pType2)                                         │          assert.Equal(t, ROUTE_TYPE_NONE, pType2)                                        
        assert.Equal(t, newPath2, path2)                                                 │          assert.Equal(t, newPath2, path2)                                                
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2713                                            │ gobgp/internal/pkg/table/policy_test.go:2656                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{                                       │          aspathParam := []bgp.AsPathParamInterface{                                      
                bgp.NewAs4PathParam(2, []uint32{                                         │                  bgp.NewAs4PathParam(2, []uint32{                                        
                        createAs4Value("65002.1"),                                       │                                                                                          
                        createAs4Value("65001.1"),                                       │                          createAs4Value("65001.1"),                                      
                        createAs4Value("65000.1"),                                       │                          createAs4Value("65000.1"),                                      
                }),                                                                      │                  }),                                                                     
        }                                                                                │          }                                                                               
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
        body := updateMsg.Body.(*bgp.BGPUpdate)                                          │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
        UpdatePathAttrs4ByteAs(logger, body)                                             │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                             │          s.Actions.BgpActions.SetAsPathPrepend.As = fmt.Sprintf("%d", createAs4Value("650
        s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                                │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 10                              
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        r.reload(pl)                                                                     │          r.reload(pl)                                                                    
        p, _ := NewPolicy(pl.PolicyDefinitions[0])                                       │          p, err := NewPolicy(pl.PolicyDefinitions[0])                                    
                                                                                         │          assert.Nil(err)                                                                 
        addPolicy(r, p)                                                                  │          addPolicy(r, p)                                                                 
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                           │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        assert.NotEqual(nil, newPath)                                                    │          assert.NotEqual(nil, newPath)                                                   
        asn := createAs4Value("65002.1")                                                 │          asn := createAs4Value("65002.1")                                                
        assert.Equal([]uint32{                                                           │          assert.Equal([]uint32{                                                          
                asn, asn, asn, asn, asn,                                                 │                  asn, asn, asn, asn, asn, asn, asn, asn, asn, asn,                       
                createAs4Value("65002.1"),                                               │                                                                                          
                createAs4Value("65001.1"),                                               │                  createAs4Value("65001.1"),                                              
                createAs4Value("65000.1"),                                               │                  createAs4Value("65000.1"),                                              
        }, newPath.GetAsSeqList())                                                       │          }, newPath.GetAsSeqList())                                                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:509                                      │ gobgp/internal/pkg/table/table_manager_test.go:564                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        bgpMessage1 := update_fromR2viaR1()                                              │          bgpMessage1 := update_fromR2viaR1_ipv6()                                        
        peer1 := peerR1()                                                                │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                               │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
        bgpMessage2 := update_fromR2()                                                   │          bgpMessage2 := update_fromR2_ipv6()                                             
        peer2 := peerR2()                                                                │          peer2 := peerR2()                                                               
        pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                                │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes               │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │                                                                                          
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          expectedNexthopAttr := pathAttributes[0]                                        
                                                                                         │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
                                                                                         │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
                                                                                         │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
                                                                                         │          expectedOrigin := pathAttributes[1]                                             
                                                                                         │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │                                                                                          
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │                                                                                          
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │                                                                                          
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 4, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 4, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "20.20.20.0/24"                                                │          expectedPrefix := "2002:223:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.100.1"                                               │          expectedNexthop := "2001::192:168:100:1"                                        
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/config/bgp_configs.go:3846                                           │ gobgp/internal/pkg/config/bgp_configs.go:3812                                            
                                                                                         │                                                                                          
        // original -> rpol:import-policy                                                │          // original -> rpol:import-policy                                               
        // list of policy names in sequence to be applied on                             │          // list of policy names in sequence to be applied on                            
        // receiving a routing update in the current context, e.g.,                      │          // receiving a routing update in the current context, e.g.,                     
        // for the current peer group, neighbor, address family,                         │          // for the current peer group, neighbor, address family,                        
        // etc.                                                                          │          // etc.                                                                         
        ImportPolicyList []string `mapstructure:"import-policy-list" json:"import-policy │          ImportPolicyList []string `mapstructure:"import-policy-list" json:"import-policy
        // original -> rpol:default-import-policy                                        │          // original -> rpol:default-import-policy                                       
        // explicitly set a default policy if no policy definition                       │          // explicitly set a default policy if no policy definition                      
        // in the import policy chain is satisfied.                                      │          // in the import policy chain is satisfied.                                     
        DefaultImportPolicy DefaultPolicyType `mapstructure:"default-import-policy" json │          DefaultImportPolicy DefaultPolicyType `mapstructure:"default-import-policy" json
        // original -> rpol:export-policy                                                │          // original -> rpol:export-policy                                               
        // list of policy names in sequence to be applied on                             │          // list of policy names in sequence to be applied on                            
        // sending a routing update in the current context, e.g.,                        │          // sending a routing update in the current context, e.g.,                       
        // for the current peer group, neighbor, address family,                         │          // for the current peer group, neighbor, address family,                        
        // etc.                                                                          │          // etc.                                                                         
        ExportPolicyList []string `mapstructure:"export-policy-list" json:"export-policy │          ExportPolicyList []string `mapstructure:"export-policy-list" json:"export-policy
        // original -> rpol:default-export-policy                                        │          // original -> rpol:default-export-policy                                       
        // explicitly set a default policy if no policy definition                       │          // explicitly set a default policy if no policy definition                      
        // in the export policy chain is satisfied.                                      │          // in the export policy chain is satisfied.                                     
        DefaultExportPolicy DefaultPolicyType `mapstructure:"default-export-policy" json │          DefaultExportPolicy DefaultPolicyType `mapstructure:"default-export-policy" json
        // original -> gobgp:in-policy                                                   │          // original -> gobgp:in-policy                                                  
        // list of policy names in sequence to be applied on                             │          // list of policy names in sequence to be applied on                            
        // sending a routing update in the current context, e.g.,                        │          // sending a routing update in the current context, e.g.,                       
        // for the current other route server clients.                                   │          // for the current other route server clients.                                  
        InPolicyList []string `mapstructure:"in-policy-list" json:"in-policy-list,omitem │          InPolicyList []string `mapstructure:"in-policy-list" json:"in-policy-list,omitem
        // original -> gobgp:default-in-policy                                           │          // original -> gobgp:default-in-policy                                          
        // explicitly set a default policy if no policy definition                       │          // explicitly set a default policy if no policy definition                      
        // in the in-policy chain is satisfied.                                          │          // in the in-policy chain is satisfied.                                         
        DefaultInPolicy DefaultPolicyType `mapstructure:"default-in-policy" json:"defaul │          DefaultInPolicy DefaultPolicyType `mapstructure:"default-in-policy" json:"defaul
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:141                                            │ gobgp/internal/pkg/table/message_test.go:106                                             
                                                                                         │                                                                                          
        as1 := []uint16{65000, 4000}                                                     │          as1 := []uint16{65000, 4000}                                                    
        param1 := bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as1)                  │          param1 := bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as1)                 
        as2 := []uint16{10, 20, 30}                                                      │          as2 := []uint16{10, 20, 30}                                                     
        param2 := bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, as2)                  │          param2 := bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, as2)                 
        as3 := []uint16{bgp.AS_TRANS, bgp.AS_TRANS, 40001}                               │          as3 := []uint16{bgp.AS_TRANS, bgp.AS_TRANS, 40001}                              
        param3 := bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as3)                  │          param3 := bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as3)                 
        params := []bgp.AsPathParamInterface{param1, param2, param3}                     │          params := []bgp.AsPathParamInterface{param1, param2, param3}                    
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        as4 := []uint32{3000, 400000, 300000, 40001}                                     │          as4 := []uint32{400000, 300000, 40001}                                          
        param4s := []*bgp.As4PathParam{bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, │          param4s := []*bgp.As4PathParam{bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ,
        as4path := bgp.NewPathAttributeAs4Path(param4s)                                  │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
        UpdatePathAttrs4ByteAs(logger, msg)                                              │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 3) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*bgp.
                                                                                         │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[2].(*
                                                                                         │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[2].(*bgp.
                                                                                         │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[2].(*bgp.
                                                                                         │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[2].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:1028                                                │ gobgp/pkg/apiutil/attribute_test.go:895                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    "1.1.1.1",                                                     │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        rules := make([]*apb.Any, 0, 3)                                                  │          rules := make([]*apb.Any, 0, 3)                                                 
        rule, err := apb.New(&api.FlowSpecIPPrefix{                                      │          rule, err := apb.New(&api.FlowSpecIPPrefix{                                     
                Type:      1, // Destination Prefix                                      │                  Type:      1, // Destination Prefix                                     
                PrefixLen: 64,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "2001:db8:1::",                                               │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecIPPrefix{                                       │          rule, err = apb.New(&api.FlowSpecIPPrefix{                                      
                Type:      2, // Source Prefix                                           │                  Type:      2, // Source Prefix                                          
                PrefixLen: 64,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "2001:db8:2::",                                               │                  Prefix:    "192.168.201.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecComponent{                                      │          rule, err = apb.New(&api.FlowSpecComponent{                                     
                Type: 3, // Next Header                                                  │                  Type: 3, // IP Protocol                                                 
                Items: []*api.FlowSpecComponentItem{                                     │                  Items: []*api.FlowSpecComponentItem{                                    
                        {                                                                │                          {                                                               
                                Op:    0x80 | 0x01, // End, EQ                           │                                  Op:    0x80 | 0x01, // End, EQ                          
                                Value: 6,           // TCP                               │                                  Value: 6,           // TCP                              
                        },                                                               │                          },                                                              
                },                                                                       │                  },                                                                      
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.VPNFlowSpecNLRI{                                          │          a, err := apb.New(&api.VPNFlowSpecNLRI{                                         
                Rd:    rd,                                                               │                  Rd:    rd,                                                              
                Rules: rules,                                                            │                  Rules: rules,                                                           
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_FLOW_SPEC_VPN,                             │                          Safi: api.Family_SAFI_FLOW_SPEC_VPN,                            
                },                                                                       │                  },                                                                      
                // NextHops: // No nexthop required                                      │                  // NextHops: // No nexthop required                                     
                Nlris: nlris,                                                            │                  Nlris: nlris,                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1895                                            │ gobgp/internal/pkg/table/policy_test.go:1849                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        community1 := "0:1"                                                              │          community1 := "65000:100"                                                       
        community2 := "10:1"                                                             │          community2 := "65000:200"                                                       
        community3 := "45686:2"                                                          │          community3 := "65100:100"                                                       
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        communities := bgp.NewPathAttributeCommunities([]uint32{                         │          communities := bgp.NewPathAttributeCommunities([]uint32{                        
                stringToCommunityValue(community1),                                      │                  stringToCommunityValue(community1),                                     
                stringToCommunityValue(community2),                                      │                  stringToCommunityValue(community2),                                     
                stringToCommunityValue(community3),                                      │                  stringToCommunityValue(community3),                                     
        })                                                                               │          })                                                                              
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("REMOVE", "^(0|45686):[0- │          s.Actions.BgpActions.SetCommunity = createSetCommunity("REMOVE", ".*:100")      
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommuni │          assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommuni
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1941                                            │ gobgp/internal/pkg/table/policy_test.go:1849                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        community1 := "65000:100"                                                        │          community1 := "65000:100"                                                       
        community2 := "65000:200"                                                        │          community2 := "65000:200"                                                       
                                                                                         │          community3 := "65100:100"                                                       
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        communities := bgp.NewPathAttributeCommunities([]uint32{                         │          communities := bgp.NewPathAttributeCommunities([]uint32{                        
                stringToCommunityValue(community1),                                      │                  stringToCommunityValue(community1),                                     
                stringToCommunityValue(community2),                                      │                  stringToCommunityValue(community2),                                     
                                                                                         │                  stringToCommunityValue(community3),                                     
        })                                                                               │          })                                                                              
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        // action NULL is obsolate                                                       │          s.Actions.BgpActions.SetCommunity = createSetCommunity("REMOVE", ".*:100")      
        s.Actions.BgpActions.SetCommunity.Options = "REPLACE"                            │                                                                                          
        s.Actions.BgpActions.SetCommunity.SetCommunityMethod.CommunitiesList = nil       │                                                                                          
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        //assert.Equal(t, []uint32{}, newPath.GetCommunities())                          │          assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommuni
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1941                                            │ gobgp/internal/pkg/table/policy_test.go:1895                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        community1 := "65000:100"                                                        │          community1 := "0:1"                                                             
        community2 := "65000:200"                                                        │          community2 := "10:1"                                                            
                                                                                         │          community3 := "45686:2"                                                         
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        communities := bgp.NewPathAttributeCommunities([]uint32{                         │          communities := bgp.NewPathAttributeCommunities([]uint32{                        
                stringToCommunityValue(community1),                                      │                  stringToCommunityValue(community1),                                     
                stringToCommunityValue(community2),                                      │                  stringToCommunityValue(community2),                                     
                                                                                         │                  stringToCommunityValue(community3),                                     
        })                                                                               │          })                                                                              
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        // action NULL is obsolate                                                       │          s.Actions.BgpActions.SetCommunity = createSetCommunity("REMOVE", "^(0|45686):[0-
        s.Actions.BgpActions.SetCommunity.Options = "REPLACE"                            │                                                                                          
        s.Actions.BgpActions.SetCommunity.SetCommunityMethod.CommunitiesList = nil       │                                                                                          
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        //assert.Equal(t, []uint32{}, newPath.GetCommunities())                          │          assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommuni
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1041                                            │ gobgp/internal/pkg/table/policy_test.go:1330                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // setup                                                                         │          // setup                                                                        
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{                                       │          aspathParam := []bgp.AsPathParamInterface{                                      
                bgp.NewAsPathParam(1, []uint16{65001, 65000, 65004, 65005}),             │                  bgp.NewAs4PathParam(1, []uint32{                                        
                bgp.NewAsPathParam(2, []uint16{65001, 65000, 65004, 65004, 65005}),      │                          createAs4Value("65001.1"),                                      
                                                                                         │                          createAs4Value("65000.1"),                                      
                                                                                         │                          createAs4Value("65004.1"),                                      
                                                                                         │                          createAs4Value("65005.1"),                                      
                                                                                         │                  }),                                                                     
                                                                                         │                  bgp.NewAs4PathParam(2, []uint32{                                        
                                                                                         │                          createAs4Value("65001.1"),                                      
                                                                                         │                          createAs4Value("65000.1"),                                      
                                                                                         │                          createAs4Value("65004.1"),                                      
                                                                                         │                          createAs4Value("65004.1"),                                      
                                                                                         │                          createAs4Value("65005.1"),                                      
                                                                                         │                  }),                                                                     
        }                                                                                │          }                                                                               
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        UpdatePathAttrs4ByteAs(logger, updateMsg.Body.(*bgp.BGPUpdate))                  │          UpdatePathAttrs4ByteAs(logger, updateMsg.Body.(*bgp.BGPUpdate))                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        asPathSet := config.AsPathSet{                                                   │          asPathSet := config.AsPathSet{                                                  
                AsPathSetName: "asset1",                                                 │                  AsPathSetName: "asset1",                                                
                AsPathList:    []string{"65005$"},                                       │                  AsPathList:    []string{fmt.Sprintf("%d$", createAs4Value("65005.1"))}, 
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        ps := createPrefixSet("ps1", "10.10.1.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.1.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
        ds.BgpDefinedSets.AsPathSets = []config.AsPathSet{asPathSet}                     │          ds.BgpDefinedSets.AsPathSets = []config.AsPathSet{asPathSet}                    
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", false)                          │          s := createStatement("statement1", "ps1", "ns1", false)                         
        s.Conditions.BgpConditions.MatchAsPathSet.AsPathSet = "asset1"                   │          s.Conditions.BgpConditions.MatchAsPathSet.AsPathSet = "asset1"                  
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │          p, _ := NewPolicy(pl.PolicyDefinitions[0])                                      
        p := r.policyMap["pd1"]                                                          │          addPolicy(r, p)                                                                 
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                       
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(t, newPath, path)                                                  
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:1098                                                │ gobgp/pkg/apiutil/attribute_test.go:895                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    "1.1.1.1",                                                     │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        rules := make([]*apb.Any, 0, 3)                                                  │          rules := make([]*apb.Any, 0, 3)                                                 
        rule, err := apb.New(&api.FlowSpecMAC{                                           │          rule, err := apb.New(&api.FlowSpecIPPrefix{                                     
                Type:    15, // Source MAC                                               │                  Type:      1, // Destination Prefix                                     
                Address: "aa:bb:cc:11:22:33",                                            │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecMAC{                                            │          rule, err = apb.New(&api.FlowSpecIPPrefix{                                      
                Type:    16, // Destination MAC                                          │                  Type:      2, // Source Prefix                                          
                Address: "dd:ee:ff:11:22:33",                                            │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.201.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecComponent{                                      │          rule, err = apb.New(&api.FlowSpecComponent{                                     
                Type: 21, // VLAN ID                                                     │                  Type: 3, // IP Protocol                                                 
                Items: []*api.FlowSpecComponentItem{                                     │                  Items: []*api.FlowSpecComponentItem{                                    
                        {                                                                │                          {                                                               
                                Op:    0x80 | 0x01, // End, EQ                           │                                  Op:    0x80 | 0x01, // End, EQ                          
                                Value: 100,                                              │                                  Value: 6,           // TCP                              
                        },                                                               │                          },                                                              
                },                                                                       │                  },                                                                      
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.VPNFlowSpecNLRI{                                          │          a, err := apb.New(&api.VPNFlowSpecNLRI{                                         
                Rd:    rd,                                                               │                  Rd:    rd,                                                              
                Rules: rules,                                                            │                  Rules: rules,                                                           
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_L2VPN,                                      │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_FLOW_SPEC_VPN,                             │                          Safi: api.Family_SAFI_FLOW_SPEC_VPN,                            
                },                                                                       │                  },                                                                      
                // NextHops: // No nexthop required                                      │                  // NextHops: // No nexthop required                                     
                Nlris: nlris,                                                            │                  Nlris: nlris,                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:1098                                                │ gobgp/pkg/apiutil/attribute_test.go:1028                                                 
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    "1.1.1.1",                                                     │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        rules := make([]*apb.Any, 0, 3)                                                  │          rules := make([]*apb.Any, 0, 3)                                                 
        rule, err := apb.New(&api.FlowSpecMAC{                                           │          rule, err := apb.New(&api.FlowSpecIPPrefix{                                     
                Type:    15, // Source MAC                                               │                  Type:      1, // Destination Prefix                                     
                Address: "aa:bb:cc:11:22:33",                                            │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecMAC{                                            │          rule, err = apb.New(&api.FlowSpecIPPrefix{                                      
                Type:    16, // Destination MAC                                          │                  Type:      2, // Source Prefix                                          
                Address: "dd:ee:ff:11:22:33",                                            │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:2::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecComponent{                                      │          rule, err = apb.New(&api.FlowSpecComponent{                                     
                Type: 21, // VLAN ID                                                     │                  Type: 3, // Next Header                                                 
                Items: []*api.FlowSpecComponentItem{                                     │                  Items: []*api.FlowSpecComponentItem{                                    
                        {                                                                │                          {                                                               
                                Op:    0x80 | 0x01, // End, EQ                           │                                  Op:    0x80 | 0x01, // End, EQ                          
                                Value: 100,                                              │                                  Value: 6,           // TCP                              
                        },                                                               │                          },                                                              
                },                                                                       │                  },                                                                      
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.VPNFlowSpecNLRI{                                          │          a, err := apb.New(&api.VPNFlowSpecNLRI{                                         
                Rd:    rd,                                                               │                  Rd:    rd,                                                              
                Rules: rules,                                                            │                  Rules: rules,                                                           
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_L2VPN,                                      │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_FLOW_SPEC_VPN,                             │                          Safi: api.Family_SAFI_FLOW_SPEC_VPN,                            
                },                                                                       │                  },                                                                      
                // NextHops: // No nexthop required                                      │                  // NextHops: // No nexthop required                                     
                Nlris: nlris,                                                            │                  Nlris: nlris,                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1805                                            │ gobgp/internal/pkg/table/policy_test.go:1849                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        community1 := "65000:100"                                                        │          community1 := "65000:100"                                                       
        community2 := "65000:200"                                                        │          community2 := "65000:200"                                                       
                                                                                         │          community3 := "65100:100"                                                       
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        communities := bgp.NewPathAttributeCommunities([]uint32{                         │          communities := bgp.NewPathAttributeCommunities([]uint32{                        
                stringToCommunityValue(community1),                                      │                  stringToCommunityValue(community1),                                     
                stringToCommunityValue(community2),                                      │                  stringToCommunityValue(community2),                                     
                                                                                         │                  stringToCommunityValue(community3),                                     
        })                                                                               │          })                                                                              
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("REMOVE", community1)     │          s.Actions.BgpActions.SetCommunity = createSetCommunity("REMOVE", ".*:100")      
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommuni │          assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommuni
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1805                                            │ gobgp/internal/pkg/table/policy_test.go:1895                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        community1 := "65000:100"                                                        │          community1 := "0:1"                                                             
        community2 := "65000:200"                                                        │          community2 := "10:1"                                                            
                                                                                         │          community3 := "45686:2"                                                         
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        communities := bgp.NewPathAttributeCommunities([]uint32{                         │          communities := bgp.NewPathAttributeCommunities([]uint32{                        
                stringToCommunityValue(community1),                                      │                  stringToCommunityValue(community1),                                     
                stringToCommunityValue(community2),                                      │                  stringToCommunityValue(community2),                                     
                                                                                         │                  stringToCommunityValue(community3),                                     
        })                                                                               │          })                                                                              
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("REMOVE", community1)     │          s.Actions.BgpActions.SetCommunity = createSetCommunity("REMOVE", "^(0|45686):[0-
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommuni │          assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommuni
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1805                                            │ gobgp/internal/pkg/table/policy_test.go:1941                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        community1 := "65000:100"                                                        │          community1 := "65000:100"                                                       
        community2 := "65000:200"                                                        │          community2 := "65000:200"                                                       
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        communities := bgp.NewPathAttributeCommunities([]uint32{                         │          communities := bgp.NewPathAttributeCommunities([]uint32{                        
                stringToCommunityValue(community1),                                      │                  stringToCommunityValue(community1),                                     
                stringToCommunityValue(community2),                                      │                  stringToCommunityValue(community2),                                     
        })                                                                               │          })                                                                              
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("REMOVE", community1)     │          // action NULL is obsolate                                                      
                                                                                         │          s.Actions.BgpActions.SetCommunity.Options = "REPLACE"                           
                                                                                         │          s.Actions.BgpActions.SetCommunity.SetCommunityMethod.CommunitiesList = nil      
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommuni │          //assert.Equal(t, []uint32{}, newPath.GetCommunities())                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:585                                             │ gobgp/internal/pkg/table/policy_test.go:700                                              
                                                                                         │                                                                                          
        // setup                                                                         │          // setup                                                                        
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{                                       │          aspathParam := []bgp.AsPathParamInterface{                                      
                bgp.NewAsPathParam(2, []uint16{65001, 65000, 65004, 65004, 65005}),      │                  bgp.NewAs4PathParam(2, []uint32{                                        
                bgp.NewAsPathParam(1, []uint16{65001, 65000, 65004, 65005}),             │                          createAs4Value("65001.1"),                                      
                                                                                         │                          createAs4Value("65000.1"),                                      
                                                                                         │                          createAs4Value("65004.1"),                                      
                                                                                         │                          createAs4Value("65004.1"),                                      
                                                                                         │                          createAs4Value("65005.1"),                                      
                                                                                         │                  }),                                                                     
                                                                                         │                  bgp.NewAs4PathParam(1, []uint32{                                        
                                                                                         │                          createAs4Value("65001.1"),                                      
                                                                                         │                          createAs4Value("65000.1"),                                      
                                                                                         │                          createAs4Value("65004.1"),                                      
                                                                                         │                          createAs4Value("65005.1"),                                      
                                                                                         │                  }),                                                                     
        }                                                                                │          }                                                                               
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        UpdatePathAttrs4ByteAs(logger, updateMsg.Body.(*bgp.BGPUpdate))                  │          UpdatePathAttrs4ByteAs(logger, updateMsg.Body.(*bgp.BGPUpdate))                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.1.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.1.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        // create match condition                                                        │          // create match condition                                                       
        asPathLength := config.AsPathLength{                                             │          asPathLength := config.AsPathLength{                                            
                Operator: "le",                                                          │                  Operator: "le",                                                         
                Value:    10,                                                            │                  Value:    10,                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", false)                          │          s := createStatement("statement1", "ps1", "ns1", false)                         
        s.Conditions.BgpConditions.AsPathLength = asPathLength                           │          s.Conditions.BgpConditions.AsPathLength = asPathLength                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │          p, _ := NewPolicy(pl.PolicyDefinitions[0])                                      
        p := r.policyMap["pd1"]                                                          │          addPolicy(r, p)                                                                 
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                       
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(t, newPath, path)                                                  
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:832                                                 │ gobgp/pkg/apiutil/attribute_test.go:895                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
                                                                                         │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                                                                                         │                  Admin:    "1.1.1.1",                                                    
                                                                                         │                  Assigned: 100,                                                          
                                                                                         │          })                                                                              
                                                                                         │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        rules := make([]*apb.Any, 0, 3)                                                  │          rules := make([]*apb.Any, 0, 3)                                                 
        rule, err := apb.New(&api.FlowSpecIPPrefix{                                      │          rule, err := apb.New(&api.FlowSpecIPPrefix{                                     
                Type:      1, // Destination Prefix                                      │                  Type:      1, // Destination Prefix                                     
                PrefixLen: 24,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "192.168.101.0",                                              │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecIPPrefix{                                       │          rule, err = apb.New(&api.FlowSpecIPPrefix{                                      
                Type:      2, // Source Prefix                                           │                  Type:      2, // Source Prefix                                          
                PrefixLen: 24,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "192.168.201.0",                                              │                  Prefix:    "192.168.201.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecComponent{                                      │          rule, err = apb.New(&api.FlowSpecComponent{                                     
                Type: 3, // IP Protocol                                                  │                  Type: 3, // IP Protocol                                                 
                Items: []*api.FlowSpecComponentItem{                                     │                  Items: []*api.FlowSpecComponentItem{                                    
                        {                                                                │                          {                                                               
                                Op:    0x80 | 0x01, // End, EQ                           │                                  Op:    0x80 | 0x01, // End, EQ                          
                                Value: 6,           // TCP                               │                                  Value: 6,           // TCP                              
                        },                                                               │                          },                                                              
                },                                                                       │                  },                                                                      
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.FlowSpecNLRI{                                             │          a, err := apb.New(&api.VPNFlowSpecNLRI{                                         
                                                                                         │                  Rd:    rd,                                                              
                Rules: rules,                                                            │                  Rules: rules,                                                           
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_FLOW_SPEC_UNICAST,                         │                          Safi: api.Family_SAFI_FLOW_SPEC_VPN,                            
                },                                                                       │                  },                                                                      
                // NextHops: // No nexthop required                                      │                  // NextHops: // No nexthop required                                     
                Nlris: nlris,                                                            │                  Nlris: nlris,                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:832                                                 │ gobgp/pkg/apiutil/attribute_test.go:1028                                                 
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
                                                                                         │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                                                                                         │                  Admin:    "1.1.1.1",                                                    
                                                                                         │                  Assigned: 100,                                                          
                                                                                         │          })                                                                              
                                                                                         │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        rules := make([]*apb.Any, 0, 3)                                                  │          rules := make([]*apb.Any, 0, 3)                                                 
        rule, err := apb.New(&api.FlowSpecIPPrefix{                                      │          rule, err := apb.New(&api.FlowSpecIPPrefix{                                     
                Type:      1, // Destination Prefix                                      │                  Type:      1, // Destination Prefix                                     
                PrefixLen: 24,                                                           │                  PrefixLen: 64,                                                          
                Prefix:    "192.168.101.0",                                              │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecIPPrefix{                                       │          rule, err = apb.New(&api.FlowSpecIPPrefix{                                      
                Type:      2, // Source Prefix                                           │                  Type:      2, // Source Prefix                                          
                PrefixLen: 24,                                                           │                  PrefixLen: 64,                                                          
                Prefix:    "192.168.201.0",                                              │                  Prefix:    "2001:db8:2::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecComponent{                                      │          rule, err = apb.New(&api.FlowSpecComponent{                                     
                Type: 3, // IP Protocol                                                  │                  Type: 3, // Next Header                                                 
                Items: []*api.FlowSpecComponentItem{                                     │                  Items: []*api.FlowSpecComponentItem{                                    
                        {                                                                │                          {                                                               
                                Op:    0x80 | 0x01, // End, EQ                           │                                  Op:    0x80 | 0x01, // End, EQ                          
                                Value: 6,           // TCP                               │                                  Value: 6,           // TCP                              
                        },                                                               │                          },                                                              
                },                                                                       │                  },                                                                      
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.FlowSpecNLRI{                                             │          a, err := apb.New(&api.VPNFlowSpecNLRI{                                         
                                                                                         │                  Rd:    rd,                                                              
                Rules: rules,                                                            │                  Rules: rules,                                                           
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_FLOW_SPEC_UNICAST,                         │                          Safi: api.Family_SAFI_FLOW_SPEC_VPN,                            
                },                                                                       │                  },                                                                      
                // NextHops: // No nexthop required                                      │                  // NextHops: // No nexthop required                                     
                Nlris: nlris,                                                            │                  Nlris: nlris,                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2567                                            │ gobgp/internal/pkg/table/policy_test.go:2656                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001,  │          aspathParam := []bgp.AsPathParamInterface{                                      
                                                                                         │                  bgp.NewAs4PathParam(2, []uint32{                                        
                                                                                         │                          createAs4Value("65001.1"),                                      
                                                                                         │                          createAs4Value("65000.1"),                                      
                                                                                         │                  }),                                                                     
                                                                                         │          }                                                                               
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
        body := updateMsg.Body.(*bgp.BGPUpdate)                                          │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
        UpdatePathAttrs4ByteAs(logger, body)                                             │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetAsPathPrepend.As = "65002"                               │          s.Actions.BgpActions.SetAsPathPrepend.As = fmt.Sprintf("%d", createAs4Value("650
        s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 10                               │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 10                              
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        r.reload(pl)                                                                     │          r.reload(pl)                                                                    
        p := r.policyMap["pd1"]                                                          │          p, err := NewPolicy(pl.PolicyDefinitions[0])                                    
                                                                                         │          assert.Nil(err)                                                                 
                                                                                         │          addPolicy(r, p)                                                                 
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                           │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        assert.NotEqual(nil, newPath)                                                    │          assert.NotEqual(nil, newPath)                                                   
        assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65002, 65002, 65 │          asn := createAs4Value("65002.1")                                                
                                                                                         │          assert.Equal([]uint32{                                                          
                                                                                         │                  asn, asn, asn, asn, asn, asn, asn, asn, asn, asn,                       
                                                                                         │                  createAs4Value("65001.1"),                                              
                                                                                         │                  createAs4Value("65000.1"),                                              
                                                                                         │          }, newPath.GetAsSeqList())                                                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2567                                            │ gobgp/internal/pkg/table/policy_test.go:2713                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001,  │          aspathParam := []bgp.AsPathParamInterface{                                      
                                                                                         │                  bgp.NewAs4PathParam(2, []uint32{                                        
                                                                                         │                          createAs4Value("65002.1"),                                      
                                                                                         │                          createAs4Value("65001.1"),                                      
                                                                                         │                          createAs4Value("65000.1"),                                      
                                                                                         │                  }),                                                                     
                                                                                         │          }                                                                               
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
        body := updateMsg.Body.(*bgp.BGPUpdate)                                          │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
        UpdatePathAttrs4ByteAs(logger, body)                                             │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetAsPathPrepend.As = "65002"                               │          s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                            
        s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 10                               │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                               
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        r.reload(pl)                                                                     │          r.reload(pl)                                                                    
        p := r.policyMap["pd1"]                                                          │          p, _ := NewPolicy(pl.PolicyDefinitions[0])                                      
                                                                                         │          addPolicy(r, p)                                                                 
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                           │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        assert.NotEqual(nil, newPath)                                                    │          assert.NotEqual(nil, newPath)                                                   
        assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65002, 65002, 65 │          asn := createAs4Value("65002.1")                                                
                                                                                         │          assert.Equal([]uint32{                                                          
                                                                                         │                  asn, asn, asn, asn, asn,                                                
                                                                                         │                  createAs4Value("65002.1"),                                              
                                                                                         │                  createAs4Value("65001.1"),                                              
                                                                                         │                  createAs4Value("65000.1"),                                              
                                                                                         │          }, newPath.GetAsSeqList())                                                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:965                                                 │ gobgp/pkg/apiutil/attribute_test.go:895                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
                                                                                         │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                                                                                         │                  Admin:    "1.1.1.1",                                                    
                                                                                         │                  Assigned: 100,                                                          
                                                                                         │          })                                                                              
                                                                                         │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        rules := make([]*apb.Any, 0, 3)                                                  │          rules := make([]*apb.Any, 0, 3)                                                 
        rule, err := apb.New(&api.FlowSpecIPPrefix{                                      │          rule, err := apb.New(&api.FlowSpecIPPrefix{                                     
                Type:      1, // Destination Prefix                                      │                  Type:      1, // Destination Prefix                                     
                PrefixLen: 64,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "2001:db8:1::",                                               │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecIPPrefix{                                       │          rule, err = apb.New(&api.FlowSpecIPPrefix{                                      
                Type:      2, // Source Prefix                                           │                  Type:      2, // Source Prefix                                          
                PrefixLen: 64,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "2001:db8:2::",                                               │                  Prefix:    "192.168.201.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecComponent{                                      │          rule, err = apb.New(&api.FlowSpecComponent{                                     
                Type: 3, // Next Header                                                  │                  Type: 3, // IP Protocol                                                 
                Items: []*api.FlowSpecComponentItem{                                     │                  Items: []*api.FlowSpecComponentItem{                                    
                        {                                                                │                          {                                                               
                                Op:    0x80 | 0x01, // End, EQ                           │                                  Op:    0x80 | 0x01, // End, EQ                          
                                Value: 6,           // TCP                               │                                  Value: 6,           // TCP                              
                        },                                                               │                          },                                                              
                },                                                                       │                  },                                                                      
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.FlowSpecNLRI{                                             │          a, err := apb.New(&api.VPNFlowSpecNLRI{                                         
                                                                                         │                  Rd:    rd,                                                              
                Rules: rules,                                                            │                  Rules: rules,                                                           
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_FLOW_SPEC_UNICAST,                         │                          Safi: api.Family_SAFI_FLOW_SPEC_VPN,                            
                },                                                                       │                  },                                                                      
                // NextHops: // No nexthop required                                      │                  // NextHops: // No nexthop required                                     
                Nlris: nlris,                                                            │                  Nlris: nlris,                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:965                                                 │ gobgp/pkg/apiutil/attribute_test.go:1028                                                 
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
                                                                                         │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                                                                                         │                  Admin:    "1.1.1.1",                                                    
                                                                                         │                  Assigned: 100,                                                          
                                                                                         │          })                                                                              
                                                                                         │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        rules := make([]*apb.Any, 0, 3)                                                  │          rules := make([]*apb.Any, 0, 3)                                                 
        rule, err := apb.New(&api.FlowSpecIPPrefix{                                      │          rule, err := apb.New(&api.FlowSpecIPPrefix{                                     
                Type:      1, // Destination Prefix                                      │                  Type:      1, // Destination Prefix                                     
                PrefixLen: 64,                                                           │                  PrefixLen: 64,                                                          
                Prefix:    "2001:db8:1::",                                               │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecIPPrefix{                                       │          rule, err = apb.New(&api.FlowSpecIPPrefix{                                      
                Type:      2, // Source Prefix                                           │                  Type:      2, // Source Prefix                                          
                PrefixLen: 64,                                                           │                  PrefixLen: 64,                                                          
                Prefix:    "2001:db8:2::",                                               │                  Prefix:    "2001:db8:2::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecComponent{                                      │          rule, err = apb.New(&api.FlowSpecComponent{                                     
                Type: 3, // Next Header                                                  │                  Type: 3, // Next Header                                                 
                Items: []*api.FlowSpecComponentItem{                                     │                  Items: []*api.FlowSpecComponentItem{                                    
                        {                                                                │                          {                                                               
                                Op:    0x80 | 0x01, // End, EQ                           │                                  Op:    0x80 | 0x01, // End, EQ                          
                                Value: 6,           // TCP                               │                                  Value: 6,           // TCP                              
                        },                                                               │                          },                                                              
                },                                                                       │                  },                                                                      
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.FlowSpecNLRI{                                             │          a, err := apb.New(&api.VPNFlowSpecNLRI{                                         
                                                                                         │                  Rd:    rd,                                                              
                Rules: rules,                                                            │                  Rules: rules,                                                           
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_FLOW_SPEC_UNICAST,                         │                          Safi: api.Family_SAFI_FLOW_SPEC_VPN,                            
                },                                                                       │                  },                                                                      
                // NextHops: // No nexthop required                                      │                  // NextHops: // No nexthop required                                     
                Nlris: nlris,                                                            │                  Nlris: nlris,                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:965                                                 │ gobgp/pkg/apiutil/attribute_test.go:1098                                                 
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
                                                                                         │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                                                                                         │                  Admin:    "1.1.1.1",                                                    
                                                                                         │                  Assigned: 100,                                                          
                                                                                         │          })                                                                              
                                                                                         │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        rules := make([]*apb.Any, 0, 3)                                                  │          rules := make([]*apb.Any, 0, 3)                                                 
        rule, err := apb.New(&api.FlowSpecIPPrefix{                                      │          rule, err := apb.New(&api.FlowSpecMAC{                                          
                Type:      1, // Destination Prefix                                      │                  Type:    15, // Source MAC                                              
                PrefixLen: 64,                                                           │                  Address: "aa:bb:cc:11:22:33",                                           
                Prefix:    "2001:db8:1::",                                               │                                                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecIPPrefix{                                       │          rule, err = apb.New(&api.FlowSpecMAC{                                           
                Type:      2, // Source Prefix                                           │                  Type:    16, // Destination MAC                                         
                PrefixLen: 64,                                                           │                  Address: "dd:ee:ff:11:22:33",                                           
                Prefix:    "2001:db8:2::",                                               │                                                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecComponent{                                      │          rule, err = apb.New(&api.FlowSpecComponent{                                     
                Type: 3, // Next Header                                                  │                  Type: 21, // VLAN ID                                                    
                Items: []*api.FlowSpecComponentItem{                                     │                  Items: []*api.FlowSpecComponentItem{                                    
                        {                                                                │                          {                                                               
                                Op:    0x80 | 0x01, // End, EQ                           │                                  Op:    0x80 | 0x01, // End, EQ                          
                                Value: 6,           // TCP                               │                                  Value: 100,                                             
                        },                                                               │                          },                                                              
                },                                                                       │                  },                                                                      
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.FlowSpecNLRI{                                             │          a, err := apb.New(&api.VPNFlowSpecNLRI{                                         
                                                                                         │                  Rd:    rd,                                                              
                Rules: rules,                                                            │                  Rules: rules,                                                           
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_FLOW_SPEC_UNICAST,                         │                          Safi: api.Family_SAFI_FLOW_SPEC_VPN,                            
                },                                                                       │                  },                                                                      
                // NextHops: // No nexthop required                                      │                  // NextHops: // No nexthop required                                     
                Nlris: nlris,                                                            │                  Nlris: nlris,                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:965                                                 │ gobgp/pkg/apiutil/attribute_test.go:832                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        rules := make([]*apb.Any, 0, 3)                                                  │          rules := make([]*apb.Any, 0, 3)                                                 
        rule, err := apb.New(&api.FlowSpecIPPrefix{                                      │          rule, err := apb.New(&api.FlowSpecIPPrefix{                                     
                Type:      1, // Destination Prefix                                      │                  Type:      1, // Destination Prefix                                     
                PrefixLen: 64,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "2001:db8:1::",                                               │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecIPPrefix{                                       │          rule, err = apb.New(&api.FlowSpecIPPrefix{                                      
                Type:      2, // Source Prefix                                           │                  Type:      2, // Source Prefix                                          
                PrefixLen: 64,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "2001:db8:2::",                                               │                  Prefix:    "192.168.201.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
        rule, err = apb.New(&api.FlowSpecComponent{                                      │          rule, err = apb.New(&api.FlowSpecComponent{                                     
                Type: 3, // Next Header                                                  │                  Type: 3, // IP Protocol                                                 
                Items: []*api.FlowSpecComponentItem{                                     │                  Items: []*api.FlowSpecComponentItem{                                    
                        {                                                                │                          {                                                               
                                Op:    0x80 | 0x01, // End, EQ                           │                                  Op:    0x80 | 0x01, // End, EQ                          
                                Value: 6,           // TCP                               │                                  Value: 6,           // TCP                              
                        },                                                               │                          },                                                              
                },                                                                       │                  },                                                                      
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        rules = append(rules, rule)                                                      │          rules = append(rules, rule)                                                     
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.FlowSpecNLRI{                                             │          a, err := apb.New(&api.FlowSpecNLRI{                                            
                Rules: rules,                                                            │                  Rules: rules,                                                           
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_FLOW_SPEC_UNICAST,                         │                          Safi: api.Family_SAFI_FLOW_SPEC_UNICAST,                        
                },                                                                       │                  },                                                                      
                // NextHops: // No nexthop required                                      │                  // NextHops: // No nexthop required                                     
                Nlris: nlris,                                                            │                  Nlris: nlris,                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:129                                      │ gobgp/internal/pkg/table/table_manager_test.go:564                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        bgpMessage := update_fromR1_ipv6()                                               │          bgpMessage1 := update_fromR2viaR1_ipv6()                                        
        peer := peerR1()                                                                 │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer, bgpMessage)                                 │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
                                                                                         │          assert.Equal(t, 1, len(pList))                                                  
                                                                                         │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
                                                                                         │          assert.NoError(t, err)                                                          
                                                                                         │          bgpMessage2 := update_fromR2_ipv6()                                             
                                                                                         │          peer2 := peerR2()                                                               
                                                                                         │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
        assert.Equal(t, 1, len(pList))                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage.Body.(*bgp.BGPUpdate).PathAttributes                │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[0]                                         │          expectedNexthopAttr := pathAttributes[0]                                        
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                        │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
        pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                              │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedOrigin := pathAttributes[1]                                              │          expectedOrigin := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                                │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[2]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 4, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 4, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "2001:123:123:1::/64"                                          │          expectedPrefix := "2002:223:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "2001::192:168:50:1"                                          │          expectedNexthop := "2001::192:168:100:1"                                        
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1761                                            │ gobgp/internal/pkg/table/policy_test.go:1849                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
                                                                                         │          community1 := "65000:100"                                                       
                                                                                         │          community2 := "65000:200"                                                       
                                                                                         │          community3 := "65100:100"                                                       
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        communities := bgp.NewPathAttributeCommunities([]uint32{                         │          communities := bgp.NewPathAttributeCommunities([]uint32{                        
                stringToCommunityValue("65001:200"),                                     │                  stringToCommunityValue(community1),                                     
                                                                                         │                  stringToCommunityValue(community2),                                     
                                                                                         │                  stringToCommunityValue(community3),                                     
        })                                                                               │          })                                                                              
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        community := "65000:100"                                                         │                                                                                          
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("REPLACE", community)     │          s.Actions.BgpActions.SetCommunity = createSetCommunity("REMOVE", ".*:100")      
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit │          assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommuni
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1761                                            │ gobgp/internal/pkg/table/policy_test.go:1895                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
                                                                                         │          community1 := "0:1"                                                             
                                                                                         │          community2 := "10:1"                                                            
                                                                                         │          community3 := "45686:2"                                                         
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        communities := bgp.NewPathAttributeCommunities([]uint32{                         │          communities := bgp.NewPathAttributeCommunities([]uint32{                        
                stringToCommunityValue("65001:200"),                                     │                  stringToCommunityValue(community1),                                     
                                                                                         │                  stringToCommunityValue(community2),                                     
                                                                                         │                  stringToCommunityValue(community3),                                     
        })                                                                               │          })                                                                              
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        community := "65000:100"                                                         │                                                                                          
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("REPLACE", community)     │          s.Actions.BgpActions.SetCommunity = createSetCommunity("REMOVE", "^(0|45686):[0-
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit │          assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommuni
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1761                                            │ gobgp/internal/pkg/table/policy_test.go:1941                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
                                                                                         │          community1 := "65000:100"                                                       
                                                                                         │          community2 := "65000:200"                                                       
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        communities := bgp.NewPathAttributeCommunities([]uint32{                         │          communities := bgp.NewPathAttributeCommunities([]uint32{                        
                stringToCommunityValue("65001:200"),                                     │                  stringToCommunityValue(community1),                                     
                                                                                         │                  stringToCommunityValue(community2),                                     
        })                                                                               │          })                                                                              
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        community := "65000:100"                                                         │                                                                                          
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("REPLACE", community)     │          // action NULL is obsolate                                                      
                                                                                         │          s.Actions.BgpActions.SetCommunity.Options = "REPLACE"                           
                                                                                         │          s.Actions.BgpActions.SetCommunity.SetCommunityMethod.CommunitiesList = nil      
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit │          //assert.Equal(t, []uint32{}, newPath.GetCommunities())                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1761                                            │ gobgp/internal/pkg/table/policy_test.go:1805                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
                                                                                         │          community1 := "65000:100"                                                       
                                                                                         │          community2 := "65000:200"                                                       
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        communities := bgp.NewPathAttributeCommunities([]uint32{                         │          communities := bgp.NewPathAttributeCommunities([]uint32{                        
                stringToCommunityValue("65001:200"),                                     │                  stringToCommunityValue(community1),                                     
                                                                                         │                  stringToCommunityValue(community2),                                     
        })                                                                               │          })                                                                              
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        community := "65000:100"                                                         │                                                                                          
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("REPLACE", community)     │          s.Actions.BgpActions.SetCommunity = createSetCommunity("REMOVE", community1)    
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit │          assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommuni
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2612                                            │ gobgp/internal/pkg/table/policy_test.go:2656                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002,  │          aspathParam := []bgp.AsPathParamInterface{                                      
                                                                                         │                  bgp.NewAs4PathParam(2, []uint32{                                        
                                                                                         │                          createAs4Value("65001.1"),                                      
                                                                                         │                          createAs4Value("65000.1"),                                      
                                                                                         │                  }),                                                                     
                                                                                         │          }                                                                               
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
        body := updateMsg.Body.(*bgp.BGPUpdate)                                          │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
        UpdatePathAttrs4ByteAs(logger, body)                                             │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                             │          s.Actions.BgpActions.SetAsPathPrepend.As = fmt.Sprintf("%d", createAs4Value("650
        s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                                │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 10                              
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        r.reload(pl)                                                                     │          r.reload(pl)                                                                    
        p := r.policyMap["pd1"]                                                          │          p, err := NewPolicy(pl.PolicyDefinitions[0])                                    
                                                                                         │          assert.Nil(err)                                                                 
                                                                                         │          addPolicy(r, p)                                                                 
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                           │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        assert.NotEqual(nil, newPath)                                                    │          assert.NotEqual(nil, newPath)                                                   
        assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, n │          asn := createAs4Value("65002.1")                                                
                                                                                         │          assert.Equal([]uint32{                                                          
                                                                                         │                  asn, asn, asn, asn, asn, asn, asn, asn, asn, asn,                       
                                                                                         │                  createAs4Value("65001.1"),                                              
                                                                                         │                  createAs4Value("65000.1"),                                              
                                                                                         │          }, newPath.GetAsSeqList())                                                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2612                                            │ gobgp/internal/pkg/table/policy_test.go:2713                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002,  │          aspathParam := []bgp.AsPathParamInterface{                                      
                                                                                         │                  bgp.NewAs4PathParam(2, []uint32{                                        
                                                                                         │                          createAs4Value("65002.1"),                                      
                                                                                         │                          createAs4Value("65001.1"),                                      
                                                                                         │                          createAs4Value("65000.1"),                                      
                                                                                         │                  }),                                                                     
                                                                                         │          }                                                                               
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
        body := updateMsg.Body.(*bgp.BGPUpdate)                                          │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
        UpdatePathAttrs4ByteAs(logger, body)                                             │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                             │          s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                            
        s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                                │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                               
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        r.reload(pl)                                                                     │          r.reload(pl)                                                                    
        p := r.policyMap["pd1"]                                                          │          p, _ := NewPolicy(pl.PolicyDefinitions[0])                                      
                                                                                         │          addPolicy(r, p)                                                                 
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                           │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        assert.NotEqual(nil, newPath)                                                    │          assert.NotEqual(nil, newPath)                                                   
        assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, n │          asn := createAs4Value("65002.1")                                                
                                                                                         │          assert.Equal([]uint32{                                                          
                                                                                         │                  asn, asn, asn, asn, asn,                                                
                                                                                         │                  createAs4Value("65002.1"),                                              
                                                                                         │                  createAs4Value("65001.1"),                                              
                                                                                         │                  createAs4Value("65000.1"),                                              
                                                                                         │          }, newPath.GetAsSeqList())                                                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2612                                            │ gobgp/internal/pkg/table/policy_test.go:2567                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002,  │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
        body := updateMsg.Body.(*bgp.BGPUpdate)                                          │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
        UpdatePathAttrs4ByteAs(logger, body)                                             │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                             │          s.Actions.BgpActions.SetAsPathPrepend.As = "65002"                              
        s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                                │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 10                              
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        r.reload(pl)                                                                     │          r.reload(pl)                                                                    
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                           │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        assert.NotEqual(nil, newPath)                                                    │          assert.NotEqual(nil, newPath)                                                   
        assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, n │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65002, 65002, 65
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:79                                       │ gobgp/internal/pkg/table/table_manager_test.go:509                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                
                                                                                         │                                                                                          
        bgpMessage := update_fromR1()                                                    │          bgpMessage1 := update_fromR2viaR1()                                             
        peer := peerR1()                                                                 │          peer1 := peerR1()                                                               
        pList, err := tm.ProcessUpdate(peer, bgpMessage)                                 │          pList, err := tm.ProcessUpdate(peer1, bgpMessage1)                              
        assert.Equal(t, len(pList), 1)                                                   │          assert.Equal(t, 1, len(pList))                                                  
                                                                                         │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
                                                                                         │          assert.NoError(t, err)                                                          
                                                                                         │          bgpMessage2 := update_fromR2()                                                  
                                                                                         │          peer2 := peerR2()                                                               
                                                                                         │          pList, err = tm.ProcessUpdate(peer2, bgpMessage2)                               
                                                                                         │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage.Body.(*bgp.BGPUpdate).PathAttributes                │          pathAttributes := bgpMessage2.Body.(*bgp.BGPUpdate).PathAttributes              
        expectedOrigin := pathAttributes[0]                                              │          expectedOrigin := pathAttributes[0]                                             
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                              
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[1]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │          expectedNexthopAttr := pathAttributes[2]                                        
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                             
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │          pathNexthop := attr.(*bgp.PathAttributeNextHop)                                 
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 4, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 4, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "20.20.20.0/24"                                               
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.50.1"                                                │          expectedNexthop := "192.168.100.1"                                              
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/table_manager_test.go:79                                       │ gobgp/internal/pkg/table/table_manager_test.go:129                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv4_UC})                 │          tm := NewTableManager(logger, []bgp.RouteFamily{bgp.RF_IPv6_UC})                
                                                                                         │                                                                                          
        bgpMessage := update_fromR1()                                                    │          bgpMessage := update_fromR1_ipv6()                                              
        peer := peerR1()                                                                 │          peer := peerR1()                                                                
        pList, err := tm.ProcessUpdate(peer, bgpMessage)                                 │          pList, err := tm.ProcessUpdate(peer, bgpMessage)                                
        assert.Equal(t, len(pList), 1)                                                   │          assert.Equal(t, 1, len(pList))                                                  
        assert.Equal(t, pList[0].IsWithdraw, false)                                      │          assert.Equal(t, pList[0].IsWithdraw, false)                                     
        assert.NoError(t, err)                                                           │          assert.NoError(t, err)                                                          
                                                                                         │                                                                                          
        // check type                                                                    │          // check type                                                                   
        path := pList[0]                                                                 │          path := pList[0]                                                                
        assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv4_UC)                           │          assert.Equal(t, path.GetRouteFamily(), bgp.RF_IPv6_UC)                          
                                                                                         │                                                                                          
        // check PathAttribute                                                           │          // check PathAttribute                                                          
        pathAttributes := bgpMessage.Body.(*bgp.BGPUpdate).PathAttributes                │          pathAttributes := bgpMessage.Body.(*bgp.BGPUpdate).PathAttributes               
        expectedOrigin := pathAttributes[0]                                              │                                                                                          
        attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               │          expectedNexthopAttr := pathAttributes[0]                                        
                                                                                         │          attr := path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI)                       
                                                                                         │          pathNexthop := attr.(*bgp.PathAttributeMpReachNLRI)                             
                                                                                         │          assert.Equal(t, expectedNexthopAttr, pathNexthop)                               
                                                                                         │                                                                                          
                                                                                         │          expectedOrigin := pathAttributes[1]                                             
                                                                                         │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_ORIGIN)                               
        pathOrigin := attr.(*bgp.PathAttributeOrigin)                                    │          pathOrigin := attr.(*bgp.PathAttributeOrigin)                                   
        assert.Equal(t, expectedOrigin, pathOrigin)                                      │          assert.Equal(t, expectedOrigin, pathOrigin)                                     
                                                                                         │                                                                                          
        expectedAsPath := pathAttributes[1]                                              │          expectedAsPath := pathAttributes[2]                                             
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                               │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_AS_PATH)                              
        pathAspath := attr.(*bgp.PathAttributeAsPath)                                    │          pathAspath := attr.(*bgp.PathAttributeAsPath)                                   
        assert.Equal(t, expectedAsPath, pathAspath)                                      │          assert.Equal(t, expectedAsPath, pathAspath)                                     
                                                                                         │                                                                                          
        expectedNexthopAttr := pathAttributes[2]                                         │                                                                                          
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP)                              │                                                                                          
        pathNexthop := attr.(*bgp.PathAttributeNextHop)                                  │                                                                                          
        assert.Equal(t, expectedNexthopAttr, pathNexthop)                                │                                                                                          
                                                                                         │                                                                                          
        expectedMed := pathAttributes[3]                                                 │          expectedMed := pathAttributes[3]                                                
        attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                       │          attr = path.getPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC)                      
        pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                                │          pathMed := attr.(*bgp.PathAttributeMultiExitDisc)                               
        assert.Equal(t, expectedMed, pathMed)                                            │          assert.Equal(t, expectedMed, pathMed)                                           
                                                                                         │                                                                                          
        // check PathAttribute length                                                    │          // check PathAttribute length                                                   
        assert.Equal(t, 4, len(path.GetPathAttrs()))                                     │          assert.Equal(t, 4, len(path.GetPathAttrs()))                                    
                                                                                         │                                                                                          
        // check destination                                                             │          // check destination                                                            
        expectedPrefix := "10.10.10.0/24"                                                │          expectedPrefix := "2001:123:123:1::/64"                                         
        assert.Equal(t, expectedPrefix, path.getPrefix())                                │          assert.Equal(t, expectedPrefix, path.getPrefix())                               
        // check nexthop                                                                 │          // check nexthop                                                                
        expectedNexthop := "192.168.50.1"                                                │          expectedNexthop := "2001::192:168:50:1"                                         
        assert.Equal(t, expectedNexthop, path.GetNexthop().String())                     │          assert.Equal(t, expectedNexthop, path.GetNexthop().String())                    
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/config/bgp_configs.go:1149                                           │ gobgp/internal/pkg/config/bgp_configs.go:1119                                            
                                                                                         │                                                                                          
        // original -> gobgp:enabled                                                     │          // original -> gobgp:enabled                                                    
        // gobgp:enabled's original type is boolean.                                     │          // gobgp:enabled's original type is boolean.                                    
        // Configure enabling to connect to zebra.                                       │          // Configure enabling to connect to zebra.                                      
        Enabled bool `mapstructure:"enabled" json:"enabled,omitempty"`                   │          Enabled bool `mapstructure:"enabled" json:"enabled,omitempty"`                  
        // original -> gobgp:url                                                         │          // original -> gobgp:url                                                        
        // Configure url for zebra.                                                      │          // Configure url for zebra.                                                     
        Url string `mapstructure:"url" json:"url,omitempty"`                             │          Url string `mapstructure:"url" json:"url,omitempty"`                            
        // original -> gobgp:redistribute-route-type                                     │          // original -> gobgp:redistribute-route-type                                    
        RedistributeRouteTypeList []string `mapstructure:"redistribute-route-type-list"  │          RedistributeRouteTypeList []string `mapstructure:"redistribute-route-type-list" 
        // original -> gobgp:version                                                     │          // original -> gobgp:version                                                    
        // Configure version of zebra protocol.  Default is 2.                           │          // Configure version of zebra protocol.  Default is 2.                          
        // Supported version are 2 or 3 for Quagga and 4, 5 or 6 for FRRouting.          │          // Supported version are 2 or 3 for Quagga and 4, 5 or 6 for FRRouting.         
        Version uint8 `mapstructure:"version" json:"version,omitempty"`                  │          Version uint8 `mapstructure:"version" json:"version,omitempty"`                 
        // original -> gobgp:nexthop-trigger-enable                                      │          // original -> gobgp:nexthop-trigger-enable                                     
        // gobgp:nexthop-trigger-enable's original type is boolean.                      │          // gobgp:nexthop-trigger-enable's original type is boolean.                     
        NexthopTriggerEnable bool `mapstructure:"nexthop-trigger-enable" json:"nexthop-t │          NexthopTriggerEnable bool `mapstructure:"nexthop-trigger-enable" json:"nexthop-t
        // original -> gobgp:nexthop-trigger-delay                                       │          // original -> gobgp:nexthop-trigger-delay                                      
        NexthopTriggerDelay uint8 `mapstructure:"nexthop-trigger-delay" json:"nexthop-tr │          NexthopTriggerDelay uint8 `mapstructure:"nexthop-trigger-delay" json:"nexthop-tr
        // original -> gobgp:mpls-label-range-size                                       │          // original -> gobgp:mpls-label-range-size                                      
        // Configure MPLS label range size which will be requested to                    │          // Configure MPLS label range size which will be requested to                   
        // FRR/Zebra.                                                                    │          // FRR/Zebra.                                                                   
        MplsLabelRangeSize uint32 `mapstructure:"mpls-label-range-size" json:"mpls-label │          MplsLabelRangeSize uint32 `mapstructure:"mpls-label-range-size" json:"mpls-label
        // original -> gobgp:software-name                                               │          // original -> gobgp:software-name                                              
        // Configure zebra software name.                                                │          // Configure zebra software name.                                               
        // frr4, cumulus, frr6, frr7, frr7.2 and frr7.3 can be used.                     │          // frr4, cumulus, frr6, frr7, frr7.2 and frr7.3 can be used.                    
        SoftwareName string `mapstructure:"software-name" json:"software-name,omitempty" │          SoftwareName string `mapstructure:"software-name" json:"software-name,omitempty"
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/api/gobgp.pb.go:5851                                                              │ gobgp/api/gobgp.pb.go:5724                                                               
                                                                                         │                                                                                          
        state         protoimpl.MessageState                                             │          state         protoimpl.MessageState                                            
        sizeCache     protoimpl.SizeCache                                                │          sizeCache     protoimpl.SizeCache                                               
        unknownFields protoimpl.UnknownFields                                            │          unknownFields protoimpl.UnknownFields                                           
                                                                                         │                                                                                          
        ApplyPolicy     *ApplyPolicy     `protobuf:"bytes,1,opt,name=apply_policy,json=a │          ApplyPolicy     *ApplyPolicy     `protobuf:"bytes,1,opt,name=apply_policy,json=a
        Conf            *PeerGroupConf   `protobuf:"bytes,2,opt,name=conf,proto3" json:" │          Conf            *PeerConf        `protobuf:"bytes,2,opt,name=conf,proto3" json:"
        EbgpMultihop    *EbgpMultihop    `protobuf:"bytes,3,opt,name=ebgp_multihop,json= │          EbgpMultihop    *EbgpMultihop    `protobuf:"bytes,3,opt,name=ebgp_multihop,json=
        RouteReflector  *RouteReflector  `protobuf:"bytes,4,opt,name=route_reflector,jso │          RouteReflector  *RouteReflector  `protobuf:"bytes,4,opt,name=route_reflector,jso
        Info            *PeerGroupState  `protobuf:"bytes,5,opt,name=info,proto3" json:" │          State           *PeerState       `protobuf:"bytes,5,opt,name=state,proto3" json:
        Timers          *Timers          `protobuf:"bytes,6,opt,name=timers,proto3" json │          Timers          *Timers          `protobuf:"bytes,6,opt,name=timers,proto3" json
        Transport       *Transport       `protobuf:"bytes,7,opt,name=transport,proto3" j │          Transport       *Transport       `protobuf:"bytes,7,opt,name=transport,proto3" j
        RouteServer     *RouteServer     `protobuf:"bytes,8,opt,name=route_server,json=r │          RouteServer     *RouteServer     `protobuf:"bytes,8,opt,name=route_server,json=r
        GracefulRestart *GracefulRestart `protobuf:"bytes,9,opt,name=graceful_restart,js │          GracefulRestart *GracefulRestart `protobuf:"bytes,9,opt,name=graceful_restart,js
        AfiSafis        []*AfiSafi       `protobuf:"bytes,10,rep,name=afi_safis,json=afi │          AfiSafis        []*AfiSafi       `protobuf:"bytes,10,rep,name=afi_safis,json=afi
        TtlSecurity     *TtlSecurity     `protobuf:"bytes,11,opt,name=ttl_security,json= │          TtlSecurity     *TtlSecurity     `protobuf:"bytes,11,opt,name=ttl_security,json=
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2480                                            │ gobgp/internal/pkg/table/policy_test.go:2567                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "-101"                                                                      │                                                                                          
        ma := "100"                                                                      │                                                                                          
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetAsPathPrepend.As = "65002"                              
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 10                              
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │                                                                                          
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(nil, newPath)                                                   
                                                                                         │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65002, 65002, 65
        v, err := newPath.GetMed()                                                       │                                                                                          
        assert.Nil(t, err)                                                               │                                                                                          
        newMed := fmt.Sprintf("%d", v)                                                   │                                                                                          
        assert.Equal(t, ma, newMed)                                                      │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2480                                            │ gobgp/internal/pkg/table/policy_test.go:2612                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "-101"                                                                      │                                                                                          
        ma := "100"                                                                      │                                                                                          
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                            
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                               
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │                                                                                          
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(nil, newPath)                                                   
                                                                                         │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, n
        v, err := newPath.GetMed()                                                       │                                                                                          
        assert.Nil(t, err)                                                               │                                                                                          
        newMed := fmt.Sprintf("%d", v)                                                   │                                                                                          
        assert.Equal(t, ma, newMed)                                                      │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2480                                            │ gobgp/internal/pkg/table/policy_test.go:2388                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(1)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "-101"                                                                      │          m := fmt.Sprintf("+%d", uint32(math.MaxUint32))                                 
        ma := "100"                                                                      │          ma := "1"                                                                       
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │                                                                                          
        v, err := newPath.GetMed()                                                       │          v, err := newPath.GetMed()                                                      
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        newMed := fmt.Sprintf("%d", v)                                                   │          newMed := fmt.Sprintf("%d", v)                                                  
        assert.Equal(t, ma, newMed)                                                      │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2344                                            │ gobgp/internal/pkg/table/policy_test.go:2567                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "+200"                                                                      │                                                                                          
        ma := "300"                                                                      │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetAsPathPrepend.As = "65002"                              
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 10                              
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │                                                                                          
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
        pType, newPath := p.Apply(logger, path, nil)                                     │                                                                                          
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │                                                                                          
        assert.NotEqual(t, nil, newPath)                                                 │                                                                                          
                                                                                         │                                                                                          
        v, err := newPath.GetMed()                                                       │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Nil(t, err)                                                               │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        newMed := fmt.Sprintf("%d", v)                                                   │          assert.NotEqual(nil, newPath)                                                   
        assert.Equal(t, ma, newMed)                                                      │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65002, 65002, 65
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2434                                            │ gobgp/internal/pkg/table/policy_test.go:2567                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "-50"                                                                       │                                                                                          
        ma := "50"                                                                       │                                                                                          
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetAsPathPrepend.As = "65002"                              
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 10                              
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │                                                                                          
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(nil, newPath)                                                   
                                                                                         │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65002, 65002, 65
        v, err := newPath.GetMed()                                                       │                                                                                          
        assert.Nil(t, err)                                                               │                                                                                          
        newMed := fmt.Sprintf("%d", v)                                                   │                                                                                          
        assert.Equal(t, ma, newMed)                                                      │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2344                                            │ gobgp/internal/pkg/table/policy_test.go:2612                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "+200"                                                                      │                                                                                          
        ma := "300"                                                                      │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                            
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                               
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │                                                                                          
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
        pType, newPath := p.Apply(logger, path, nil)                                     │                                                                                          
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │                                                                                          
        assert.NotEqual(t, nil, newPath)                                                 │                                                                                          
                                                                                         │                                                                                          
        v, err := newPath.GetMed()                                                       │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Nil(t, err)                                                               │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        newMed := fmt.Sprintf("%d", v)                                                   │          assert.NotEqual(nil, newPath)                                                   
        assert.Equal(t, ma, newMed)                                                      │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, n
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2434                                            │ gobgp/internal/pkg/table/policy_test.go:2612                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "-50"                                                                       │                                                                                          
        ma := "50"                                                                       │                                                                                          
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                            
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                               
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │                                                                                          
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(nil, newPath)                                                   
                                                                                         │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, n
        v, err := newPath.GetMed()                                                       │                                                                                          
        assert.Nil(t, err)                                                               │                                                                                          
        newMed := fmt.Sprintf("%d", v)                                                   │                                                                                          
        assert.Equal(t, ma, newMed)                                                      │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2344                                            │ gobgp/internal/pkg/table/policy_test.go:2388                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(1)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "+200"                                                                      │          m := fmt.Sprintf("+%d", uint32(math.MaxUint32))                                 
        ma := "300"                                                                      │          ma := "1"                                                                       
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │                                                                                          
        v, err := newPath.GetMed()                                                       │          v, err := newPath.GetMed()                                                      
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        newMed := fmt.Sprintf("%d", v)                                                   │          newMed := fmt.Sprintf("%d", v)                                                  
        assert.Equal(t, ma, newMed)                                                      │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2434                                            │ gobgp/internal/pkg/table/policy_test.go:2388                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(1)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "-50"                                                                       │          m := fmt.Sprintf("+%d", uint32(math.MaxUint32))                                 
        ma := "50"                                                                       │          ma := "1"                                                                       
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │                                                                                          
        v, err := newPath.GetMed()                                                       │          v, err := newPath.GetMed()                                                      
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        newMed := fmt.Sprintf("%d", v)                                                   │          newMed := fmt.Sprintf("%d", v)                                                  
        assert.Equal(t, ma, newMed)                                                      │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2344                                            │ gobgp/internal/pkg/table/policy_test.go:2480                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(100)                                   
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "+200"                                                                      │          m := "-101"                                                                     
        ma := "300"                                                                      │          ma := "100"                                                                     
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │                                                                                          
        v, err := newPath.GetMed()                                                       │          v, err := newPath.GetMed()                                                      
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        newMed := fmt.Sprintf("%d", v)                                                   │          newMed := fmt.Sprintf("%d", v)                                                  
        assert.Equal(t, ma, newMed)                                                      │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2434                                            │ gobgp/internal/pkg/table/policy_test.go:2480                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(100)                                   
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "-50"                                                                       │          m := "-101"                                                                     
        ma := "50"                                                                       │          ma := "100"                                                                     
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │                                                                                          
        v, err := newPath.GetMed()                                                       │          v, err := newPath.GetMed()                                                      
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        newMed := fmt.Sprintf("%d", v)                                                   │          newMed := fmt.Sprintf("%d", v)                                                  
        assert.Equal(t, ma, newMed)                                                      │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2434                                            │ gobgp/internal/pkg/table/policy_test.go:2344                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(100)                                   
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "-50"                                                                       │          m := "+200"                                                                     
        ma := "50"                                                                       │          ma := "300"                                                                     
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │                                                                                          
        v, err := newPath.GetMed()                                                       │          v, err := newPath.GetMed()                                                      
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        newMed := fmt.Sprintf("%d", v)                                                   │          newMed := fmt.Sprintf("%d", v)                                                  
        assert.Equal(t, ma, newMed)                                                      │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:235                                            │ gobgp/internal/pkg/table/message_test.go:172                                             
                                                                                         │                                                                                          
        as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                   │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        as4 := []uint32{100000, 65000, 4000, 400000, 300000, 40001}                      │          as4 := []uint32{400000, 300000, 40001}                                          
        as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)              │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
        param4s := []*bgp.As4PathParam{as4param1}                                        │          as5 := []uint32{10, 20, 30}                                                     
                                                                                         │          as4param2 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, as5)             
                                                                                         │          param4s := []*bgp.As4PathParam{as4param1, as4param2}                            
        as4path := bgp.NewPathAttributeAs4Path(param4s)                                  │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
        UpdatePathAttrs4ByteAs(logger, msg)                                              │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 2) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*
                                                                                         │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*bgp.
                                                                                         │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*bgp.
                                                                                         │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1720                                            │ gobgp/internal/pkg/table/policy_test.go:1849                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
                                                                                         │          community1 := "65000:100"                                                       
                                                                                         │          community2 := "65000:200"                                                       
                                                                                         │          community3 := "65100:100"                                                       
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          communities := bgp.NewPathAttributeCommunities([]uint32{                        
                                                                                         │                  stringToCommunityValue(community1),                                     
                                                                                         │                  stringToCommunityValue(community2),                                     
                                                                                         │                  stringToCommunityValue(community3),                                     
                                                                                         │          })                                                                              
                                                                                         │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        community := "65000:100"                                                         │                                                                                          
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)         │          s.Actions.BgpActions.SetCommunity = createSetCommunity("REMOVE", ".*:100")      
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit │          assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommuni
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1720                                            │ gobgp/internal/pkg/table/policy_test.go:1895                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
                                                                                         │          community1 := "0:1"                                                             
                                                                                         │          community2 := "10:1"                                                            
                                                                                         │          community3 := "45686:2"                                                         
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          communities := bgp.NewPathAttributeCommunities([]uint32{                        
                                                                                         │                  stringToCommunityValue(community1),                                     
                                                                                         │                  stringToCommunityValue(community2),                                     
                                                                                         │                  stringToCommunityValue(community3),                                     
                                                                                         │          })                                                                              
                                                                                         │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        community := "65000:100"                                                         │                                                                                          
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)         │          s.Actions.BgpActions.SetCommunity = createSetCommunity("REMOVE", "^(0|45686):[0-
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit │          assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommuni
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1720                                            │ gobgp/internal/pkg/table/policy_test.go:1941                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
                                                                                         │          community1 := "65000:100"                                                       
                                                                                         │          community2 := "65000:200"                                                       
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          communities := bgp.NewPathAttributeCommunities([]uint32{                        
                                                                                         │                  stringToCommunityValue(community1),                                     
                                                                                         │                  stringToCommunityValue(community2),                                     
                                                                                         │          })                                                                              
                                                                                         │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        community := "65000:100"                                                         │                                                                                          
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)         │          // action NULL is obsolate                                                      
                                                                                         │          s.Actions.BgpActions.SetCommunity.Options = "REPLACE"                           
                                                                                         │          s.Actions.BgpActions.SetCommunity.SetCommunityMethod.CommunitiesList = nil      
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit │          //assert.Equal(t, []uint32{}, newPath.GetCommunities())                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1720                                            │ gobgp/internal/pkg/table/policy_test.go:1805                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
                                                                                         │          community1 := "65000:100"                                                       
                                                                                         │          community2 := "65000:200"                                                       
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          communities := bgp.NewPathAttributeCommunities([]uint32{                        
                                                                                         │                  stringToCommunityValue(community1),                                     
                                                                                         │                  stringToCommunityValue(community2),                                     
                                                                                         │          })                                                                              
                                                                                         │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        community := "65000:100"                                                         │                                                                                          
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)         │          s.Actions.BgpActions.SetCommunity = createSetCommunity("REMOVE", community1)    
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit │          assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommuni
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1720                                            │ gobgp/internal/pkg/table/policy_test.go:1761                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          communities := bgp.NewPathAttributeCommunities([]uint32{                        
                                                                                         │                  stringToCommunityValue("65001:200"),                                    
                                                                                         │          })                                                                              
                                                                                         │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med, com
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        community := "65000:100"                                                         │          community := "65000:100"                                                        
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)         │          s.Actions.BgpActions.SetCommunity = createSetCommunity("REPLACE", community)    
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit │          assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1720                                            │ gobgp/internal/pkg/table/policy_test.go:2612                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        community := "65000:100"                                                         │                                                                                          
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)         │          s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                            
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                               
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │                                                                                          
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(nil, newPath)                                                   
        assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, n
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1720                                            │ gobgp/internal/pkg/table/policy_test.go:2388                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(1)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        community := "65000:100"                                                         │          m := fmt.Sprintf("+%d", uint32(math.MaxUint32))                                 
                                                                                         │          ma := "1"                                                                       
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)         │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit │                                                                                          
                                                                                         │          v, err := newPath.GetMed()                                                      
                                                                                         │          assert.Nil(t, err)                                                              
                                                                                         │          newMed := fmt.Sprintf("%d", v)                                                  
                                                                                         │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1720                                            │ gobgp/internal/pkg/table/policy_test.go:2480                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(100)                                   
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        community := "65000:100"                                                         │          m := "-101"                                                                     
                                                                                         │          ma := "100"                                                                     
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)         │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit │                                                                                          
                                                                                         │          v, err := newPath.GetMed()                                                      
                                                                                         │          assert.Nil(t, err)                                                              
                                                                                         │          newMed := fmt.Sprintf("%d", v)                                                  
                                                                                         │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1720                                            │ gobgp/internal/pkg/table/policy_test.go:2344                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(100)                                   
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        community := "65000:100"                                                         │          m := "+200"                                                                     
                                                                                         │          ma := "300"                                                                     
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)         │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit │                                                                                          
                                                                                         │          v, err := newPath.GetMed()                                                      
                                                                                         │          assert.Nil(t, err)                                                              
                                                                                         │          newMed := fmt.Sprintf("%d", v)                                                  
                                                                                         │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:1720                                            │ gobgp/internal/pkg/table/policy_test.go:2434                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(100)                                   
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        community := "65000:100"                                                         │          m := "-50"                                                                      
                                                                                         │          ma := "50"                                                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)         │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit │                                                                                          
                                                                                         │          v, err := newPath.GetMed()                                                      
                                                                                         │          assert.Nil(t, err)                                                              
                                                                                         │          newMed := fmt.Sprintf("%d", v)                                                  
                                                                                         │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:472                                             │ gobgp/internal/pkg/table/policy_test.go:633                                              
                                                                                         │                                                                                          
        // setup                                                                         │          // setup                                                                        
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{                                       │          aspathParam := []bgp.AsPathParamInterface{                                      
                bgp.NewAsPathParam(2, []uint16{65001, 65000, 65004, 65005}),             │                  bgp.NewAs4PathParam(2, []uint32{                                        
                bgp.NewAsPathParam(1, []uint16{65001, 65000, 65004, 65005}),             │                          createAs4Value("65001.1"),                                      
                                                                                         │                          createAs4Value("65000.1"),                                      
                                                                                         │                          createAs4Value("65004.1"),                                      
                                                                                         │                          createAs4Value("65005.1"),                                      
                                                                                         │                  }),                                                                     
                                                                                         │                  bgp.NewAs4PathParam(1, []uint32{                                        
                                                                                         │                          createAs4Value("65001.1"),                                      
                                                                                         │                          createAs4Value("65000.1"),                                      
                                                                                         │                          createAs4Value("65004.1"),                                      
                                                                                         │                          createAs4Value("65005.1"),                                      
                                                                                         │                  }),                                                                     
        }                                                                                │          }                                                                               
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        UpdatePathAttrs4ByteAs(logger, updateMsg.Body.(*bgp.BGPUpdate))                  │          UpdatePathAttrs4ByteAs(logger, updateMsg.Body.(*bgp.BGPUpdate))                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create match condition                                                        │          // create match condition                                                       
        asPathLength := config.AsPathLength{                                             │          asPathLength := config.AsPathLength{                                            
                Operator: "eq",                                                          │                  Operator: "eq",                                                         
                Value:    5,                                                             │                  Value:    5,                                                            
        }                                                                                │          }                                                                               
        c, _ := NewAsPathLengthCondition(asPathLength)                                   │          c, _ := NewAsPathLengthCondition(asPathLength)                                  
                                                                                         │                                                                                          
        // test                                                                          │          // test                                                                         
        assert.Equal(t, true, c.Evaluate(path, nil))                                     │          assert.Equal(t, true, c.Evaluate(path, nil))                                    
                                                                                         │                                                                                          
        // create match condition                                                        │          // create match condition                                                       
        asPathLength = config.AsPathLength{                                              │          asPathLength = config.AsPathLength{                                             
                Operator: "ge",                                                          │                  Operator: "ge",                                                         
                Value:    3,                                                             │                  Value:    3,                                                            
        }                                                                                │          }                                                                               
        c, _ = NewAsPathLengthCondition(asPathLength)                                    │          c, _ = NewAsPathLengthCondition(asPathLength)                                   
                                                                                         │                                                                                          
        // test                                                                          │          // test                                                                         
        assert.Equal(t, true, c.Evaluate(path, nil))                                     │          assert.Equal(t, true, c.Evaluate(path, nil))                                    
                                                                                         │                                                                                          
        // create match condition                                                        │          // create match condition                                                       
        asPathLength = config.AsPathLength{                                              │          asPathLength = config.AsPathLength{                                             
                Operator: "le",                                                          │                  Operator: "le",                                                         
                Value:    3,                                                             │                  Value:    3,                                                            
        }                                                                                │          }                                                                               
        c, _ = NewAsPathLengthCondition(asPathLength)                                    │          c, _ = NewAsPathLengthCondition(asPathLength)                                   
                                                                                         │                                                                                          
        // test                                                                          │          // test                                                                         
        assert.Equal(t, false, c.Evaluate(path, nil))                                    │          assert.Equal(t, false, c.Evaluate(path, nil))                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2300                                            │ gobgp/internal/pkg/table/policy_test.go:2567                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "200"                                                                       │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetAsPathPrepend.As = "65002"                              
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 10                              
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │                                                                                          
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(nil, newPath)                                                   
        v, err := newPath.GetMed()                                                       │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65002, 65002, 65
        assert.Nil(t, err)                                                               │                                                                                          
        newMed := fmt.Sprintf("%d", v)                                                   │                                                                                          
        assert.Equal(t, m, newMed)                                                       │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2300                                            │ gobgp/internal/pkg/table/policy_test.go:2612                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "200"                                                                       │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                            
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                               
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │                                                                                          
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(nil, newPath)                                                   
        v, err := newPath.GetMed()                                                       │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, n
        assert.Nil(t, err)                                                               │                                                                                          
        newMed := fmt.Sprintf("%d", v)                                                   │                                                                                          
        assert.Equal(t, m, newMed)                                                       │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2300                                            │ gobgp/internal/pkg/table/policy_test.go:2388                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(1)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "200"                                                                       │          m := fmt.Sprintf("+%d", uint32(math.MaxUint32))                                 
                                                                                         │          ma := "1"                                                                       
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │                                                                                          
        v, err := newPath.GetMed()                                                       │          v, err := newPath.GetMed()                                                      
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        newMed := fmt.Sprintf("%d", v)                                                   │          newMed := fmt.Sprintf("%d", v)                                                  
        assert.Equal(t, m, newMed)                                                       │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2300                                            │ gobgp/internal/pkg/table/policy_test.go:2480                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(100)                                   
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "200"                                                                       │          m := "-101"                                                                     
                                                                                         │          ma := "100"                                                                     
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │                                                                                          
        v, err := newPath.GetMed()                                                       │          v, err := newPath.GetMed()                                                      
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        newMed := fmt.Sprintf("%d", v)                                                   │          newMed := fmt.Sprintf("%d", v)                                                  
        assert.Equal(t, m, newMed)                                                       │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2300                                            │ gobgp/internal/pkg/table/policy_test.go:2344                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(100)                                   
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "200"                                                                       │          m := "+200"                                                                     
                                                                                         │          ma := "300"                                                                     
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │                                                                                          
        v, err := newPath.GetMed()                                                       │          v, err := newPath.GetMed()                                                      
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        newMed := fmt.Sprintf("%d", v)                                                   │          newMed := fmt.Sprintf("%d", v)                                                  
        assert.Equal(t, m, newMed)                                                       │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2300                                            │ gobgp/internal/pkg/table/policy_test.go:2434                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(100)                                   
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "200"                                                                       │          m := "-50"                                                                      
                                                                                         │          ma := "50"                                                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │                                                                                          
        v, err := newPath.GetMed()                                                       │          v, err := newPath.GetMed()                                                      
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        newMed := fmt.Sprintf("%d", v)                                                   │          newMed := fmt.Sprintf("%d", v)                                                  
        assert.Equal(t, m, newMed)                                                       │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2300                                            │ gobgp/internal/pkg/table/policy_test.go:1720                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(100)                                    │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "200"                                                                       │          community := "65000:100"                                                        
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)        
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
        v, err := newPath.GetMed()                                                       │          assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit
        assert.Nil(t, err)                                                               │                                                                                          
        newMed := fmt.Sprintf("%d", v)                                                   │                                                                                          
        assert.Equal(t, m, newMed)                                                       │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/config/bgp_configs.go:3291                                           │ gobgp/internal/pkg/config/bgp_configs.go:1909                                            
                                                                                         │                                                                                          
        if lhs == nil || rhs == nil {                                                    │          if lhs == nil || rhs == nil {                                                   
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        if !lhs.Config.Equal(&(rhs.Config)) {                                            │          if !lhs.Config.Equal(&(rhs.Config)) {                                           
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        if !lhs.Timers.Equal(&(rhs.Timers)) {                                            │          if !lhs.Timers.Equal(&(rhs.Timers)) {                                           
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        if !lhs.Transport.Equal(&(rhs.Transport)) {                                      │          if !lhs.Transport.Equal(&(rhs.Transport)) {                                     
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        if !lhs.ErrorHandling.Equal(&(rhs.ErrorHandling)) {                              │          if !lhs.ErrorHandling.Equal(&(rhs.ErrorHandling)) {                             
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        if !lhs.LoggingOptions.Equal(&(rhs.LoggingOptions)) {                            │          if !lhs.LoggingOptions.Equal(&(rhs.LoggingOptions)) {                           
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        if !lhs.EbgpMultihop.Equal(&(rhs.EbgpMultihop)) {                                │          if !lhs.EbgpMultihop.Equal(&(rhs.EbgpMultihop)) {                               
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        if !lhs.RouteReflector.Equal(&(rhs.RouteReflector)) {                            │          if !lhs.RouteReflector.Equal(&(rhs.RouteReflector)) {                           
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        if !lhs.AsPathOptions.Equal(&(rhs.AsPathOptions)) {                              │          if !lhs.AsPathOptions.Equal(&(rhs.AsPathOptions)) {                             
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        if !lhs.AddPaths.Equal(&(rhs.AddPaths)) {                                        │          if !lhs.AddPaths.Equal(&(rhs.AddPaths)) {                                       
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        if len(lhs.AfiSafis) != len(rhs.AfiSafis) {                                      │          if len(lhs.AfiSafis) != len(rhs.AfiSafis) {                                     
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        {                                                                                │          {                                                                               
                lmap := make(map[string]*AfiSafi)                                        │                  lmap := make(map[string]*AfiSafi)                                       
                for i, l := range lhs.AfiSafis {                                         │                  for i, l := range lhs.AfiSafis {                                        
                        lmap[mapkey(i, string(l.Config.AfiSafiName))] = &lhs.AfiSafis[i] │                          lmap[mapkey(i, string(l.Config.AfiSafiName))] = &lhs.AfiSafis[i]
                }                                                                        │                  }                                                                       
                for i, r := range rhs.AfiSafis {                                         │                  for i, r := range rhs.AfiSafis {                                        
                        if l, y := lmap[mapkey(i, string(r.Config.AfiSafiName))]; !y {   │                          if l, y := lmap[mapkey(i, string(r.Config.AfiSafiName))]; !y {  
                                return false                                             │                                  return false                                            
                        } else if !r.Equal(l) {                                          │                          } else if !r.Equal(l) {                                         
                                return false                                             │                                  return false                                            
                        }                                                                │                          }                                                               
                }                                                                        │                  }                                                                       
        }                                                                                │          }                                                                               
        if !lhs.GracefulRestart.Equal(&(rhs.GracefulRestart)) {                          │          if !lhs.GracefulRestart.Equal(&(rhs.GracefulRestart)) {                         
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        if !lhs.ApplyPolicy.Equal(&(rhs.ApplyPolicy)) {                                  │          if !lhs.ApplyPolicy.Equal(&(rhs.ApplyPolicy)) {                                 
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        if !lhs.UseMultiplePaths.Equal(&(rhs.UseMultiplePaths)) {                        │          if !lhs.UseMultiplePaths.Equal(&(rhs.UseMultiplePaths)) {                       
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        if !lhs.RouteServer.Equal(&(rhs.RouteServer)) {                                  │          if !lhs.RouteServer.Equal(&(rhs.RouteServer)) {                                 
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        if !lhs.TtlSecurity.Equal(&(rhs.TtlSecurity)) {                                  │          if !lhs.TtlSecurity.Equal(&(rhs.TtlSecurity)) {                                 
                return false                                                             │                  return false                                                            
        }                                                                                │          }                                                                               
        return true                                                                      │          return true                                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:261                                            │ gobgp/internal/pkg/table/message_test.go:172                                             
                                                                                         │                                                                                          
        as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                   │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        as4 := []uint32{300000, 40001}                                                   │          as4 := []uint32{400000, 300000, 40001}                                          
        as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)              │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
        param4s := []*bgp.As4PathParam{as4param1}                                        │          as5 := []uint32{10, 20, 30}                                                     
                                                                                         │          as4param2 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, as5)             
                                                                                         │          param4s := []*bgp.As4PathParam{as4param1, as4param2}                            
        as4path := bgp.NewPathAttributeAs4Path(param4s)                                  │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
        UpdatePathAttrs4ByteAs(logger, msg)                                              │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 2) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*
                                                                                         │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*bgp.
                                                                                         │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*bgp.
                                                                                         │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:261                                            │ gobgp/internal/pkg/table/message_test.go:235                                             
                                                                                         │                                                                                          
        as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                   │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        as4 := []uint32{300000, 40001}                                                   │          as4 := []uint32{100000, 65000, 4000, 400000, 300000, 40001}                     
        as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)              │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
        param4s := []*bgp.As4PathParam{as4param1}                                        │          param4s := []*bgp.As4PathParam{as4param1}                                       
        as4path := bgp.NewPathAttributeAs4Path(param4s)                                  │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
        UpdatePathAttrs4ByteAs(logger, msg)                                              │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:309                                            │ gobgp/internal/pkg/table/message_test.go:172                                             
                                                                                         │                                                                                          
        as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                   │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        as4 := []uint32{}                                                                │          as4 := []uint32{400000, 300000, 40001}                                          
        as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)              │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
        param4s := []*bgp.As4PathParam{as4param1}                                        │          as5 := []uint32{10, 20, 30}                                                     
                                                                                         │          as4param2 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, as5)             
                                                                                         │          param4s := []*bgp.As4PathParam{as4param1, as4param2}                            
        as4path := bgp.NewPathAttributeAs4Path(param4s)                                  │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
        UpdatePathAttrs4ByteAs(logger, msg)                                              │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 2) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*
                                                                                         │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*bgp.
                                                                                         │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*bgp.
                                                                                         │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:309                                            │ gobgp/internal/pkg/table/message_test.go:235                                             
                                                                                         │                                                                                          
        as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                   │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        as4 := []uint32{}                                                                │          as4 := []uint32{100000, 65000, 4000, 400000, 300000, 40001}                     
        as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)              │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
        param4s := []*bgp.As4PathParam{as4param1}                                        │          param4s := []*bgp.As4PathParam{as4param1}                                       
        as4path := bgp.NewPathAttributeAs4Path(param4s)                                  │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
        UpdatePathAttrs4ByteAs(logger, msg)                                              │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:309                                            │ gobgp/internal/pkg/table/message_test.go:261                                             
                                                                                         │                                                                                          
        as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                   │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        as4 := []uint32{}                                                                │          as4 := []uint32{300000, 40001}                                                  
        as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)              │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
        param4s := []*bgp.As4PathParam{as4param1}                                        │          param4s := []*bgp.As4PathParam{as4param1}                                       
        as4path := bgp.NewPathAttributeAs4Path(param4s)                                  │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
        UpdatePathAttrs4ByteAs(logger, msg)                                              │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/config/bgp_configs.go:1424                                           │ gobgp/internal/pkg/config/bgp_configs.go:1395                                            
                                                                                         │                                                                                          
        // original -> gobgp:address                                                     │          // original -> gobgp:address                                                    
        // gobgp:address's original type is inet:ip-address.                             │          // gobgp:address's original type is inet:ip-address.                            
        // Reference to the address of the BMP server used as                            │          // Reference to the address of the BMP server used as                           
        // a key in the BMP server list.                                                 │          // a key in the BMP server list.                                                
        Address string `mapstructure:"address" json:"address,omitempty"`                 │          Address string `mapstructure:"address" json:"address,omitempty"`                
        // original -> gobgp:port                                                        │          // original -> gobgp:port                                                       
        // Reference to the port of the BMP server.                                      │          // Reference to the port of the BMP server.                                     
        Port uint32 `mapstructure:"port" json:"port,omitempty"`                          │          Port uint32 `mapstructure:"port" json:"port,omitempty"`                         
        // original -> gobgp:route-monitoring-policy                                     │          // original -> gobgp:route-monitoring-policy                                    
        RouteMonitoringPolicy BmpRouteMonitoringPolicyType `mapstructure:"route-monitori │          RouteMonitoringPolicy BmpRouteMonitoringPolicyType `mapstructure:"route-monitori
        // original -> gobgp:statistics-timeout                                          │          // original -> gobgp:statistics-timeout                                         
        // Interval seconds of statistics messages sent to BMP server.                   │          // Interval seconds of statistics messages sent to BMP server.                  
        StatisticsTimeout uint16 `mapstructure:"statistics-timeout" json:"statistics-tim │          StatisticsTimeout uint16 `mapstructure:"statistics-timeout" json:"statistics-tim
        // original -> gobgp:route-mirroring-enabled                                     │          // original -> gobgp:route-mirroring-enabled                                    
        // gobgp:route-mirroring-enabled's original type is boolean.                     │          // gobgp:route-mirroring-enabled's original type is boolean.                    
        // Enable feature for mirroring of received BGP messages                         │          // Enable feature for mirroring of received BGP messages                        
        // mainly for debugging purpose.                                                 │          // mainly for debugging purpose.                                                
        RouteMirroringEnabled bool `mapstructure:"route-mirroring-enabled" json:"route-m │          RouteMirroringEnabled bool `mapstructure:"route-mirroring-enabled" json:"route-m
        // original -> gobgp:sys-name                                                    │          // original -> gobgp:sys-name                                                   
        // Reference to the SysName of the BMP server.                                   │          // Reference to the SysName of the BMP server.                                  
        SysName string `mapstructure:"sys-name" json:"sys-name,omitempty"`               │          SysName string `mapstructure:"sys-name" json:"sys-name,omitempty"`              
        // original -> gobgp:sys-descr                                                   │          // original -> gobgp:sys-descr                                                  
        // Reference to the SysDescr of the BMP server.                                  │          // Reference to the SysDescr of the BMP server.                                 
        SysDescr string `mapstructure:"sys-descr" json:"sys-descr,omitempty"`            │          SysDescr string `mapstructure:"sys-descr" json:"sys-descr,omitempty"`           
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:81                                             │ gobgp/internal/pkg/table/message_test.go:172                                             
                                                                                         │                                                                                          
        as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                   │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        as4 := []uint32{400000, 300000, 40001}                                           │          as4 := []uint32{400000, 300000, 40001}                                          
        param4s := []*bgp.As4PathParam{bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
                                                                                         │          as5 := []uint32{10, 20, 30}                                                     
                                                                                         │          as4param2 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, as5)             
                                                                                         │          param4s := []*bgp.As4PathParam{as4param1, as4param2}                            
        as4path := bgp.NewPathAttributeAs4Path(param4s)                                  │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
        UpdatePathAttrs4ByteAs(logger, msg)                                              │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 2) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*
                                                                                         │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*bgp.
                                                                                         │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*bgp.
                                                                                         │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[1].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:81                                             │ gobgp/internal/pkg/table/message_test.go:235                                             
                                                                                         │                                                                                          
        as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                   │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        as4 := []uint32{400000, 300000, 40001}                                           │          as4 := []uint32{100000, 65000, 4000, 400000, 300000, 40001}                     
        param4s := []*bgp.As4PathParam{bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
                                                                                         │          param4s := []*bgp.As4PathParam{as4param1}                                       
        as4path := bgp.NewPathAttributeAs4Path(param4s)                                  │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
        UpdatePathAttrs4ByteAs(logger, msg)                                              │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:81                                             │ gobgp/internal/pkg/table/message_test.go:261                                             
                                                                                         │                                                                                          
        as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                   │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        as4 := []uint32{400000, 300000, 40001}                                           │          as4 := []uint32{300000, 40001}                                                  
        param4s := []*bgp.As4PathParam{bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
                                                                                         │          param4s := []*bgp.As4PathParam{as4param1}                                       
        as4path := bgp.NewPathAttributeAs4Path(param4s)                                  │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
        UpdatePathAttrs4ByteAs(logger, msg)                                              │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:81                                             │ gobgp/internal/pkg/table/message_test.go:309                                             
                                                                                         │                                                                                          
        as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                   │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        as4 := []uint32{400000, 300000, 40001}                                           │          as4 := []uint32{}                                                               
        param4s := []*bgp.As4PathParam{bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
                                                                                         │          param4s := []*bgp.As4PathParam{as4param1}                                       
        as4path := bgp.NewPathAttributeAs4Path(param4s)                                  │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
        UpdatePathAttrs4ByteAs(logger, msg)                                              │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/api/gobgp.pb.go:6318                                                              │ gobgp/api/gobgp.pb.go:6429                                                               
                                                                                         │                                                                                          
        state         protoimpl.MessageState                                             │          state         protoimpl.MessageState                                            
        sizeCache     protoimpl.SizeCache                                                │          sizeCache     protoimpl.SizeCache                                               
        unknownFields protoimpl.UnknownFields                                            │          unknownFields protoimpl.UnknownFields                                           
                                                                                         │                                                                                          
        AuthPassword     string        `protobuf:"bytes,1,opt,name=auth_password,json=au │          AuthPassword     string        `protobuf:"bytes,1,opt,name=auth_password,json=au
        Description      string        `protobuf:"bytes,2,opt,name=description,proto3" j │          Description      string        `protobuf:"bytes,2,opt,name=description,proto3" j
        LocalAsn         uint32        `protobuf:"varint,3,opt,name=local_asn,json=local │          LocalAsn         uint32        `protobuf:"varint,3,opt,name=local_asn,json=local
        PeerAsn          uint32        `protobuf:"varint,4,opt,name=peer_asn,json=peerAs │          PeerAsn          uint32        `protobuf:"varint,4,opt,name=peer_asn,json=peerAs
        PeerGroupName    string        `protobuf:"bytes,5,opt,name=peer_group_name,json= │          PeerGroupName    string        `protobuf:"bytes,5,opt,name=peer_group_name,json=
        Type             PeerType      `protobuf:"varint,6,opt,name=type,proto3,enum=api │          Type             PeerType      `protobuf:"varint,6,opt,name=type,proto3,enum=api
        RemovePrivate    RemovePrivate `protobuf:"varint,7,opt,name=remove_private,json= │          RemovePrivate    RemovePrivate `protobuf:"varint,7,opt,name=remove_private,json=
        RouteFlapDamping bool          `protobuf:"varint,8,opt,name=route_flap_damping,j │          RouteFlapDamping bool          `protobuf:"varint,8,opt,name=route_flap_damping,j
        SendCommunity    uint32        `protobuf:"varint,9,opt,name=send_community,json= │          SendCommunity    uint32        `protobuf:"varint,9,opt,name=send_community,json=
                                                                                         │          TotalPaths       uint32        `protobuf:"varint,10,opt,name=total_paths,json=to
                                                                                         │          TotalPrefixes    uint32        `protobuf:"varint,11,opt,name=total_prefixes,json
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2526                                            │ gobgp/internal/pkg/table/policy_test.go:2612                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
                                                                                         │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop}          │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "-50"                                                                       │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                            
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                               
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │                                                                                          
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(nil, newPath)                                                   
                                                                                         │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, n
        _, err = newPath.GetMed()                                                        │                                                                                          
        assert.NotNil(t, err)                                                            │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2526                                            │ gobgp/internal/pkg/table/policy_test.go:2388                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
                                                                                         │          med := bgp.NewPathAttributeMultiExitDisc(1)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop}          │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "-50"                                                                       │          m := fmt.Sprintf("+%d", uint32(math.MaxUint32))                                 
                                                                                         │          ma := "1"                                                                       
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │                                                                                          
        _, err = newPath.GetMed()                                                        │          v, err := newPath.GetMed()                                                      
        assert.NotNil(t, err)                                                            │          assert.Nil(t, err)                                                              
                                                                                         │          newMed := fmt.Sprintf("%d", v)                                                  
                                                                                         │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2526                                            │ gobgp/internal/pkg/table/policy_test.go:2480                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
                                                                                         │          med := bgp.NewPathAttributeMultiExitDisc(100)                                   
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop}          │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "-50"                                                                       │          m := "-101"                                                                     
                                                                                         │          ma := "100"                                                                     
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │                                                                                          
        _, err = newPath.GetMed()                                                        │          v, err := newPath.GetMed()                                                      
        assert.NotNil(t, err)                                                            │          assert.Nil(t, err)                                                              
                                                                                         │          newMed := fmt.Sprintf("%d", v)                                                  
                                                                                         │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2526                                            │ gobgp/internal/pkg/table/policy_test.go:2344                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
                                                                                         │          med := bgp.NewPathAttributeMultiExitDisc(100)                                   
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop}          │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "-50"                                                                       │          m := "+200"                                                                     
                                                                                         │          ma := "300"                                                                     
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │                                                                                          
        _, err = newPath.GetMed()                                                        │          v, err := newPath.GetMed()                                                      
        assert.NotNil(t, err)                                                            │          assert.Nil(t, err)                                                              
                                                                                         │          newMed := fmt.Sprintf("%d", v)                                                  
                                                                                         │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2526                                            │ gobgp/internal/pkg/table/policy_test.go:2434                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
                                                                                         │          med := bgp.NewPathAttributeMultiExitDisc(100)                                   
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop}          │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "-50"                                                                       │          m := "-50"                                                                      
                                                                                         │          ma := "50"                                                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │                                                                                          
        _, err = newPath.GetMed()                                                        │          v, err := newPath.GetMed()                                                      
        assert.NotNil(t, err)                                                            │          assert.Nil(t, err)                                                              
                                                                                         │          newMed := fmt.Sprintf("%d", v)                                                  
                                                                                         │          assert.Equal(t, ma, newMed)                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2526                                            │ gobgp/internal/pkg/table/policy_test.go:1720                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
                                                                                         │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop}          │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "-50"                                                                       │          community := "65000:100"                                                        
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)        
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │          assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit
        _, err = newPath.GetMed()                                                        │                                                                                          
        assert.NotNil(t, err)                                                            │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:2526                                            │ gobgp/internal/pkg/table/policy_test.go:2300                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
                                                                                         │          med := bgp.NewPathAttributeMultiExitDisc(100)                                   
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop}          │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        m := "-50"                                                                       │          m := "200"                                                                      
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                            │          s.Actions.BgpActions.SetMed = config.BgpSetMedType(m)                           
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        p := r.policyMap["pd1"]                                                          │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
        pType, newPath := p.Apply(logger, path, nil)                                     │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.NotEqual(t, nil, newPath)                                                 │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │          v, err := newPath.GetMed()                                                      
        _, err = newPath.GetMed()                                                        │          assert.Nil(t, err)                                                              
        assert.NotNil(t, err)                                                            │          newMed := fmt.Sprintf("%d", v)                                                  
                                                                                         │          assert.Equal(t, m, newMed)                                                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:521                                             │ gobgp/internal/pkg/table/policy_test.go:585                                              
                                                                                         │                                                                                          
                                                                                         │          // setup                                                                        
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{                                      
                                                                                         │                  bgp.NewAsPathParam(2, []uint16{65001, 65000, 65004, 65004, 65005}),     
                                                                                         │                  bgp.NewAsPathParam(1, []uint16{65001, 65000, 65004, 65005}),            
                                                                                         │          }                                                                               
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │          UpdatePathAttrs4ByteAs(logger, updateMsg.Body.(*bgp.BGPUpdate))                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.1.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
        s := createStatement("statement1", "ps1", "ns1", true)                           │                                                                                          
        s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.1/32"}               │          // create match condition                                                       
                                                                                         │          asPathLength := config.AsPathLength{                                            
                                                                                         │                  Operator: "le",                                                         
                                                                                         │                  Value:    10,                                                           
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
                                                                                         │          s := createStatement("statement1", "ps1", "ns1", false)                         
                                                                                         │          s.Conditions.BgpConditions.AsPathLength = asPathLength                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          p := r.policyMap["pd1"]                                                         
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          pType, newPath := p.Apply(logger, path, nil)                                    
                                                                                         │          assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                       
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(t, newPath, path)                                                  
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:521                                             │ gobgp/internal/pkg/table/policy_test.go:2567                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.1/32"}               │          s.Actions.BgpActions.SetAsPathPrepend.As = "65002"                              
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 10                              
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │          p := r.policyMap["pd1"]                                                         
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │                                                                                          
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
                                                                                         │          assert.NotEqual(nil, newPath)                                                   
                                                                                         │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65002, 65002, 65
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:521                                             │ gobgp/internal/pkg/table/policy_test.go:2612                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.1/32"}               │          s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                            
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                               
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │          p := r.policyMap["pd1"]                                                         
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │                                                                                          
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
                                                                                         │          assert.NotEqual(nil, newPath)                                                   
                                                                                         │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, n
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:521                                             │ gobgp/internal/pkg/table/policy_test.go:1720                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
                                                                                         │          community := "65000:100"                                                        
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.1/32"}               │          s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)        
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
                                                                                         │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.Equal(t, newPath, path)                                                   │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │          assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:649                                                 │ gobgp/pkg/apiutil/attribute_test.go:509                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    "1.1.1.1",                                                     │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        esi := &api.EthernetSegmentIdentifier{                                           │          esi := &api.EthernetSegmentIdentifier{                                          
                Type:  0,                                                                │                  Type:  0,                                                               
                Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                                │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
        }                                                                                │          }                                                                               
        a, err := apb.New(&api.EVPNIPPrefixRoute{                                        │          a, err := apb.New(&api.EVPNMACIPAdvertisementRoute{                             
                Rd:          rd,                                                         │                  Rd:          rd,                                                        
                Esi:         esi,                                                        │                  Esi:         esi,                                                       
                EthernetTag: 100,                                                        │                  EthernetTag: 100,                                                       
                IpPrefixLen: 24,                                                         │                  MacAddress:  "aa:bb:cc:dd:ee:ff",                                       
                IpPrefix:    "192.168.101.0",                                            │                  IpAddress:   "192.168.101.1",                                           
                Label:       200,                                                        │                  Labels:      []uint32{200},                                             
                GwAddress:   "172.16.101.1",                                             │                                                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_L2VPN,                                      │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_EVPN,                                      │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:553                                             │ gobgp/internal/pkg/table/policy_test.go:585                                              
                                                                                         │                                                                                          
                                                                                         │          // setup                                                                        
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{                                      
                                                                                         │                  bgp.NewAsPathParam(2, []uint16{65001, 65000, 65004, 65004, 65005}),     
                                                                                         │                  bgp.NewAsPathParam(1, []uint16{65001, 65000, 65004, 65005}),            
                                                                                         │          }                                                                               
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │          UpdatePathAttrs4ByteAs(logger, updateMsg.Body.(*bgp.BGPUpdate))                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.1.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
        s := createStatement("statement1", "ps1", "ns1", true)                           │                                                                                          
        s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.12"}                 │          // create match condition                                                       
                                                                                         │          asPathLength := config.AsPathLength{                                            
                                                                                         │                  Operator: "le",                                                         
                                                                                         │                  Value:    10,                                                           
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
                                                                                         │          s := createStatement("statement1", "ps1", "ns1", false)                         
                                                                                         │          s.Conditions.BgpConditions.AsPathLength = asPathLength                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          p := r.policyMap["pd1"]                                                         
        assert.Equal(t, ROUTE_TYPE_NONE, pType)                                          │          pType, newPath := p.Apply(logger, path, nil)                                    
                                                                                         │          assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                       
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(t, newPath, path)                                                  
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:553                                             │ gobgp/internal/pkg/table/policy_test.go:2567                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.12"}                 │          s.Actions.BgpActions.SetAsPathPrepend.As = "65002"                              
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 10                              
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │          p := r.policyMap["pd1"]                                                         
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │                                                                                          
        assert.Equal(t, ROUTE_TYPE_NONE, pType)                                          │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
                                                                                         │          assert.NotEqual(nil, newPath)                                                   
                                                                                         │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65002, 65002, 65
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:553                                             │ gobgp/internal/pkg/table/policy_test.go:2612                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.12"}                 │          s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                            
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                               
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │          p := r.policyMap["pd1"]                                                         
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │                                                                                          
        assert.Equal(t, ROUTE_TYPE_NONE, pType)                                          │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
                                                                                         │          assert.NotEqual(nil, newPath)                                                   
                                                                                         │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, n
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:553                                             │ gobgp/internal/pkg/table/policy_test.go:1720                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
                                                                                         │          community := "65000:100"                                                        
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.12"}                 │          s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)        
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          p := r.policyMap["pd1"]                                                         
        assert.Equal(t, ROUTE_TYPE_NONE, pType)                                          │                                                                                          
        assert.Equal(t, newPath, path)                                                   │          pType, newPath := p.Apply(logger, path, nil)                                    
                                                                                         │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
                                                                                         │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │          assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:553                                             │ gobgp/internal/pkg/table/policy_test.go:521                                              
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.12"}                 │          s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.1/32"}              
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                   
        assert.Equal(t, ROUTE_TYPE_NONE, pType)                                          │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(t, newPath, path)                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/packet/bgp/bgp_test.go:2958                                                   │ gobgp/pkg/packet/bgp/bgp_test.go:2975                                                    
[]byte{                                                                                  │  []byte{                                                                                 
                        0x00, 0x02, 0x00, 0x69, // Link NLRI, correct length             │                          0x00, 0x02, 0x00, 0x81, // Link NLRI, correct length            
                        0x02,                                           // Protocol ISIS │                          0x02,                                           // Protocol ISIS
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ID            │                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ID           
                        0x01, 0x00, 0x00, 0x22, // Local Node Desc                       │                          0x01, 0x00, 0x00, 0x22, // Local Node Desc                      
                        0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179 │                          0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179
                        0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID │                          0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID
                        0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area │                          0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area
                        0x02, 0x03, 0x00, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // T │                          0x02, 0x03, 0x00, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // T
                        0x01, 0x01, 0x00, 0x22, // Remote Node Desc                      │                          0x01, 0x01, 0x00, 0x22, // Remote Node Desc                     
                        0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179 │                          0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179
                        0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID │                          0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID
                        0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area │                          0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area
                        0x02, 0x03, 0x00, 0x06, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, // T │                          0x02, 0x03, 0x00, 0x06, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, // T
                        0x01, 0x03, 0x00, 0x04, 0x01, 0x01, 0x01, 0x01, // IPv4 Interfac │                          0x01, 0x05, 0x00, 0x10, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00
                        0x01, 0x04, 0x00, 0x04, 0x02, 0x02, 0x02, 0x02, // IPv4 Neighbor │                          0x01, 0x06, 0x00, 0x10, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00
                }, "NLRI { LINK { LOCAL_NODE: 0102.0304.0506 REMOTE_NODE: 0605.0403.0201 │                  }, "NLRI { LINK { LOCAL_NODE: 0102.0304.0506 REMOTE_NODE: 0605.0403.020 
 next prev up                                                                                                                                                                        
 gobgp/pkg/packet/bgp/bgp_test.go:1521                                                   │ gobgp/pkg/packet/bgp/bgp_test.go:1484                                                    
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        var tests = []struct {                                                           │          var tests = []struct {                                                          
                in        []byte                                                         │                  in        []byte                                                        
                want      string                                                         │                  want      string                                                        
                serialize bool                                                           │                  serialize bool                                                          
                err       bool                                                           │                  err       bool                                                          
        }{                                                                               │          }{                                                                              
                {[]byte{0x01, 0x06, 0x00, 0x10, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00 │                  {[]byte{0x01, 0x05, 0x00, 0x10, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00
                {[]byte{0x01, 0x06, 0x00, 0x10, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00 │                  {[]byte{0x01, 0x05, 0x00, 0x10, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00
                {[]byte{0x01, 0x06, 0x00, 0x10, 0xfe, 0x81, 0x0d, 0xb8, 0x00, 0x00, 0x00 │                  {[]byte{0x01, 0x05, 0x00, 0x10, 0xfe, 0x80, 0x0d, 0xb8, 0x00, 0x00, 0x00
                {[]byte{0x01, 0x06, 0x00, 0x03, 0x00, 0x00, 0x00}, "", false, true},     │                  {[]byte{0x01, 0x05, 0x00, 0x03, 0x00, 0x00, 0x00}, "", false, true},    
                {[]byte{0xfe, 0xfe, 0x00, 0x00}, "", false, true},                       │                  {[]byte{0xfe, 0xfe, 0x00, 0x00}, "", false, true},                      
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        for _, test := range tests {                                                     │          for _, test := range tests {                                                    
                tlv := LsTLVIPv6NeighborAddr{}                                           │                  tlv := LsTLVIPv6InterfaceAddr{}                                         
                if test.err {                                                            │                  if test.err {                                                           
                        assert.Error(tlv.DecodeFromBytes(test.in))                       │                          assert.Error(tlv.DecodeFromBytes(test.in))                      
                        continue                                                         │                          continue                                                        
                } else {                                                                 │                  } else {                                                                
                        assert.NoError(tlv.DecodeFromBytes(test.in))                     │                          assert.NoError(tlv.DecodeFromBytes(test.in))                    
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
                got, err := tlv.MarshalJSON()                                            │                  got, err := tlv.MarshalJSON()                                           
                assert.NoError(err)                                                      │                  assert.NoError(err)                                                     
                assert.Equal(got, []byte(test.want))                                     │                  assert.Equal(got, []byte(test.want))                                    
                                                                                         │                                                                                          
                if test.serialize {                                                      │                  if test.serialize {                                                     
                        s, err := tlv.Serialize()                                        │                          s, err := tlv.Serialize()                                       
                        assert.NoError(err)                                              │                          assert.NoError(err)                                             
                        assert.Equal(test.in, s)                                         │                          assert.Equal(test.in, s)                                        
                }                                                                        │                  }                                                                       
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/api/gobgp.pb.go:8059                                                              │ gobgp/api/gobgp.pb.go:7964                                                               
                                                                                         │                                                                                          
        state         protoimpl.MessageState                                             │          state         protoimpl.MessageState                                            
        sizeCache     protoimpl.SizeCache                                                │          sizeCache     protoimpl.SizeCache                                               
        unknownFields protoimpl.UnknownFields                                            │          unknownFields protoimpl.UnknownFields                                           
                                                                                         │                                                                                          
        AlwaysCompareMed         bool `protobuf:"varint,1,opt,name=always_compare_med,js │          AlwaysCompareMed         bool `protobuf:"varint,1,opt,name=always_compare_med,js
        IgnoreAsPathLength       bool `protobuf:"varint,2,opt,name=ignore_as_path_length │          IgnoreAsPathLength       bool `protobuf:"varint,2,opt,name=ignore_as_path_length
        ExternalCompareRouterId  bool `protobuf:"varint,3,opt,name=external_compare_rout │          ExternalCompareRouterId  bool `protobuf:"varint,3,opt,name=external_compare_rout
        AdvertiseInactiveRoutes  bool `protobuf:"varint,4,opt,name=advertise_inactive_ro │          AdvertiseInactiveRoutes  bool `protobuf:"varint,4,opt,name=advertise_inactive_ro
        EnableAigp               bool `protobuf:"varint,5,opt,name=enable_aigp,json=enab │          EnableAigp               bool `protobuf:"varint,5,opt,name=enable_aigp,json=enab
        IgnoreNextHopIgpMetric   bool `protobuf:"varint,6,opt,name=ignore_next_hop_igp_m │          IgnoreNextHopIgpMetric   bool `protobuf:"varint,6,opt,name=ignore_next_hop_igp_m
        DisableBestPathSelection bool `protobuf:"varint,7,opt,name=disable_best_path_sel │          DisableBestPathSelection bool `protobuf:"varint,7,opt,name=disable_best_path_sel
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:293                                             │ gobgp/internal/pkg/table/policy_test.go:2567                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.As = "65002"                              
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 10                              
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │          p := r.policyMap["pd1"]                                                         
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │                                                                                          
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, path, newPath)                                                   │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
                                                                                         │          assert.NotEqual(nil, newPath)                                                   
                                                                                         │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65002, 65002, 65
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:293                                             │ gobgp/internal/pkg/table/policy_test.go:2612                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                            
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                               
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │          p := r.policyMap["pd1"]                                                         
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │                                                                                          
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, path, newPath)                                                   │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
                                                                                         │          assert.NotEqual(nil, newPath)                                                   
                                                                                         │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, n
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:293                                             │ gobgp/internal/pkg/table/policy_test.go:1720                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
                                                                                         │          community := "65000:100"                                                        
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
                                                                                         │          s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)        
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          p := r.policyMap["pd1"]                                                         
                                                                                         │                                                                                          
                                                                                         │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.Equal(t, path, newPath)                                                   │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │          assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:293                                             │ gobgp/internal/pkg/table/policy_test.go:521                                              
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
                                                                                         │          s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.1/32"}              
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │                                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                   
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.Equal(t, path, newPath)                                                   │          assert.Equal(t, newPath, path)                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:293                                             │ gobgp/internal/pkg/table/policy_test.go:553                                              
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", true)                           │          s := createStatement("statement1", "ps1", "ns1", true)                          
                                                                                         │          s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.12"}                
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        //test                                                                           │                                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                   
        assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_NONE, pType)                                         
        assert.Equal(t, path, newPath)                                                   │          assert.Equal(t, newPath, path)                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:262                                             │ gobgp/internal/pkg/table/policy_test.go:585                                              
                                                                                         │                                                                                          
                                                                                         │          // setup                                                                        
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{                                      
                                                                                         │                  bgp.NewAsPathParam(2, []uint16{65001, 65000, 65004, 65004, 65005}),     
                                                                                         │                  bgp.NewAsPathParam(1, []uint16{65001, 65000, 65004, 65005}),            
                                                                                         │          }                                                                               
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │          UpdatePathAttrs4ByteAs(logger, updateMsg.Body.(*bgp.BGPUpdate))                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.1.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
                                                                                         │          // create match condition                                                       
                                                                                         │          asPathLength := config.AsPathLength{                                            
                                                                                         │                  Operator: "le",                                                         
                                                                                         │                  Value:    10,                                                           
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", false)                          │          s := createStatement("statement1", "ps1", "ns1", false)                         
                                                                                         │          s.Conditions.BgpConditions.AsPathLength = asPathLength                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          p := r.policyMap["pd1"]                                                         
                                                                                         │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                       
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(t, newPath, path)                                                  
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:262                                             │ gobgp/internal/pkg/table/policy_test.go:2612                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", false)                          │          s := createStatement("statement1", "ps1", "ns1", true)                          
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                            
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                               
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │          p := r.policyMap["pd1"]                                                         
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │                                                                                          
        assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                        │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
                                                                                         │          assert.NotEqual(nil, newPath)                                                   
                                                                                         │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, n
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:262                                             │ gobgp/internal/pkg/table/policy_test.go:1720                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", false)                          │          community := "65000:100"                                                        
                                                                                         │                                                                                          
                                                                                         │          s := createStatement("statement1", "ps1", "ns1", true)                          
                                                                                         │          s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)        
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          p := r.policyMap["pd1"]                                                         
        assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                        │                                                                                          
        assert.Equal(t, newPath, path)                                                   │          pType, newPath := p.Apply(logger, path, nil)                                    
                                                                                         │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
                                                                                         │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │          assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:262                                             │ gobgp/internal/pkg/table/policy_test.go:521                                              
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s := createStatement("statement1", "ps1", "ns1", false)                          │          s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.1/32"}              
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                   
        assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(t, newPath, path)                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:262                                             │ gobgp/internal/pkg/table/policy_test.go:553                                              
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │          s := createStatement("statement1", "ps1", "ns1", true)                          
        s := createStatement("statement1", "ps1", "ns1", false)                          │          s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.12"}                
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                   
        assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_NONE, pType)                                         
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(t, newPath, path)                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:262                                             │ gobgp/internal/pkg/table/policy_test.go:293                                              
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                           │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", false)                          │          s := createStatement("statement1", "ps1", "ns1", true)                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                   
        assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                        │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(t, path, newPath)                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:231                                             │ gobgp/internal/pkg/table/policy_test.go:585                                              
                                                                                         │                                                                                          
                                                                                         │          // setup                                                                        
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{                                      
                                                                                         │                  bgp.NewAsPathParam(2, []uint16{65001, 65000, 65004, 65004, 65005}),     
                                                                                         │                  bgp.NewAsPathParam(1, []uint16{65001, 65000, 65004, 65005}),            
                                                                                         │          }                                                                               
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │          UpdatePathAttrs4ByteAs(logger, updateMsg.Body.(*bgp.BGPUpdate))                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.3.0.0/16", "21..24")                            │          ps := createPrefixSet("ps1", "10.10.1.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
                                                                                         │          // create match condition                                                       
                                                                                         │          asPathLength := config.AsPathLength{                                            
                                                                                         │                  Operator: "le",                                                         
                                                                                         │                  Value:    10,                                                           
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", false)                          │          s := createStatement("statement1", "ps1", "ns1", false)                         
                                                                                         │          s.Conditions.BgpConditions.AsPathLength = asPathLength                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          p := r.policyMap["pd1"]                                                         
        assert.Equal(t, ROUTE_TYPE_NONE, pType)                                          │          pType, newPath := p.Apply(logger, path, nil)                                    
                                                                                         │          assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                       
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(t, newPath, path)                                                  
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:231                                             │ gobgp/internal/pkg/table/policy_test.go:2567                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.3.0.0/16", "21..24")                            │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
        s := createStatement("statement1", "ps1", "ns1", false)                          │                                                                                          
                                                                                         │          s := createStatement("statement1", "ps1", "ns1", true)                          
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.As = "65002"                              
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 10                              
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │          p := r.policyMap["pd1"]                                                         
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │                                                                                          
        assert.Equal(t, ROUTE_TYPE_NONE, pType)                                          │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
                                                                                         │          assert.NotEqual(nil, newPath)                                                   
                                                                                         │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65002, 65002, 65
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:231                                             │ gobgp/internal/pkg/table/policy_test.go:2612                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                                                                                         │          assert := assert.New(t)                                                         
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65002, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
                                                                                         │                                                                                          
                                                                                         │          body := updateMsg.Body.(*bgp.BGPUpdate)                                         
                                                                                         │          UpdatePathAttrs4ByteAs(logger, body)                                            
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.3.0.0/16", "21..24")                            │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
        s := createStatement("statement1", "ps1", "ns1", false)                          │                                                                                          
                                                                                         │          s := createStatement("statement1", "ps1", "ns1", true)                          
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.As = "last-as"                            
                                                                                         │          s.Actions.BgpActions.SetAsPathPrepend.RepeatN = 5                               
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          r.reload(pl)                                                                    
        assert.Nil(t, err)                                                               │          p := r.policyMap["pd1"]                                                         
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │                                                                                          
        assert.Equal(t, ROUTE_TYPE_NONE, pType)                                          │          pType, newPath := p.Apply(logger, path, nil)                                    
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(ROUTE_TYPE_ACCEPT, pType)                                          
                                                                                         │          assert.NotEqual(nil, newPath)                                                   
                                                                                         │          assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, n
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:231                                             │ gobgp/internal/pkg/table/policy_test.go:1720                                             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.3.0.0/16", "21..24")                            │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
                                                                                         │                                                                                          
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
        s := createStatement("statement1", "ps1", "ns1", false)                          │                                                                                          
                                                                                         │          community := "65000:100"                                                        
                                                                                         │                                                                                          
                                                                                         │          s := createStatement("statement1", "ps1", "ns1", true)                          
                                                                                         │          s.Actions.BgpActions.SetCommunity = createSetCommunity("ADD", community)        
                                                                                         │                                                                                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          p := r.policyMap["pd1"]                                                         
        assert.Equal(t, ROUTE_TYPE_NONE, pType)                                          │                                                                                          
        assert.Equal(t, newPath, path)                                                   │          pType, newPath := p.Apply(logger, path, nil)                                    
                                                                                         │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
                                                                                         │          assert.NotEqual(t, nil, newPath)                                                
                                                                                         │          assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunit
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:231                                             │ gobgp/internal/pkg/table/policy_test.go:521                                              
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.3.0.0/16", "21..24")                            │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
        s := createStatement("statement1", "ps1", "ns1", false)                          │          s := createStatement("statement1", "ps1", "ns1", true)                          
                                                                                         │          s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.1/32"}              
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                   
        assert.Equal(t, ROUTE_TYPE_NONE, pType)                                          │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(t, newPath, path)                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:231                                             │ gobgp/internal/pkg/table/policy_test.go:553                                              
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.3.0.0/16", "21..24")                            │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
        s := createStatement("statement1", "ps1", "ns1", false)                          │          s := createStatement("statement1", "ps1", "ns1", true)                          
                                                                                         │          s.Conditions.BgpConditions.NextHopInList = []string{"10.0.0.12"}                
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                   
        assert.Equal(t, ROUTE_TYPE_NONE, pType)                                          │          assert.Equal(t, ROUTE_TYPE_NONE, pType)                                         
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(t, newPath, path)                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:231                                             │ gobgp/internal/pkg/table/policy_test.go:293                                              
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.3.0.0/16", "21..24")                            │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
        s := createStatement("statement1", "ps1", "ns1", false)                          │                                                                                          
                                                                                         │          s := createStatement("statement1", "ps1", "ns1", true)                          
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
                                                                                         │          //test                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                   
        assert.Equal(t, ROUTE_TYPE_NONE, pType)                                          │          assert.Equal(t, ROUTE_TYPE_ACCEPT, pType)                                       
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(t, path, newPath)                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:231                                             │ gobgp/internal/pkg/table/policy_test.go:262                                              
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}              │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
                                                                                         │                                                                                          
        // create policy                                                                 │          // create policy                                                                
        ps := createPrefixSet("ps1", "10.3.0.0/16", "21..24")                            │          ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24")                          
        ns := createNeighborSet("ns1", "10.0.0.1")                                       │          ns := createNeighborSet("ns1", "10.0.0.1")                                      
        ds := config.DefinedSets{}                                                       │          ds := config.DefinedSets{}                                                      
        ds.PrefixSets = []config.PrefixSet{ps}                                           │          ds.PrefixSets = []config.PrefixSet{ps}                                          
        ds.NeighborSets = []config.NeighborSet{ns}                                       │          ds.NeighborSets = []config.NeighborSet{ns}                                      
                                                                                         │                                                                                          
        s := createStatement("statement1", "ps1", "ns1", false)                          │          s := createStatement("statement1", "ps1", "ns1", false)                         
        pd := createPolicyDefinition("pd1", s)                                           │          pd := createPolicyDefinition("pd1", s)                                          
        pl := createRoutingPolicy(ds, pd)                                                │          pl := createRoutingPolicy(ds, pd)                                               
                                                                                         │                                                                                          
        r := NewRoutingPolicy(logger)                                                    │          r := NewRoutingPolicy(logger)                                                   
        err := r.reload(pl)                                                              │          err := r.reload(pl)                                                             
        assert.Nil(t, err)                                                               │          assert.Nil(t, err)                                                              
        pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                    │          pType, newPath := r.policyMap["pd1"].Apply(logger, path, nil)                   
        assert.Equal(t, ROUTE_TYPE_NONE, pType)                                          │          assert.Equal(t, ROUTE_TYPE_REJECT, pType)                                       
        assert.Equal(t, newPath, path)                                                   │          assert.Equal(t, newPath, path)                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:461                                                 │ gobgp/pkg/apiutil/attribute_test.go:509                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherTwoOctetASN{                           │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    65000,                                                         │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        esi := &api.EthernetSegmentIdentifier{                                           │          esi := &api.EthernetSegmentIdentifier{                                          
                Type:  0,                                                                │                  Type:  0,                                                               
                Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                                │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
        }                                                                                │          }                                                                               
        a, err := apb.New(&api.EVPNEthernetAutoDiscoveryRoute{                           │          a, err := apb.New(&api.EVPNMACIPAdvertisementRoute{                             
                Rd:          rd,                                                         │                  Rd:          rd,                                                        
                Esi:         esi,                                                        │                  Esi:         esi,                                                       
                EthernetTag: 100,                                                        │                  EthernetTag: 100,                                                       
                Label:       200,                                                        │                  MacAddress:  "aa:bb:cc:dd:ee:ff",                                       
                                                                                         │                  IpAddress:   "192.168.101.1",                                           
                                                                                         │                  Labels:      []uint32{200},                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_L2VPN,                                      │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_EVPN,                                      │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:461                                                 │ gobgp/pkg/apiutil/attribute_test.go:649                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherTwoOctetASN{                           │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    65000,                                                         │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        esi := &api.EthernetSegmentIdentifier{                                           │          esi := &api.EthernetSegmentIdentifier{                                          
                Type:  0,                                                                │                  Type:  0,                                                               
                Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                                │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
        }                                                                                │          }                                                                               
        a, err := apb.New(&api.EVPNEthernetAutoDiscoveryRoute{                           │          a, err := apb.New(&api.EVPNIPPrefixRoute{                                       
                Rd:          rd,                                                         │                  Rd:          rd,                                                        
                Esi:         esi,                                                        │                  Esi:         esi,                                                       
                EthernetTag: 100,                                                        │                  EthernetTag: 100,                                                       
                                                                                         │                  IpPrefixLen: 24,                                                        
                                                                                         │                  IpPrefix:    "192.168.101.0",                                           
                Label:       200,                                                        │                  Label:       200,                                                       
                                                                                         │                  GwAddress:   "172.16.101.1",                                            
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_L2VPN,                                      │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_EVPN,                                      │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:287                                            │ gobgp/internal/pkg/table/message_test.go:235                                             
                                                                                         │                                                                                          
        as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                   │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath}, nil).B │          as4 := []uint32{100000, 65000, 4000, 400000, 300000, 40001}                     
                                                                                         │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
                                                                                         │          param4s := []*bgp.As4PathParam{as4param1}                                       
                                                                                         │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
                                                                                         │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
        UpdatePathAttrs4ByteAs(logger, msg)                                              │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:287                                            │ gobgp/internal/pkg/table/message_test.go:261                                             
                                                                                         │                                                                                          
        as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                   │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath}, nil).B │          as4 := []uint32{300000, 40001}                                                  
                                                                                         │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
                                                                                         │          param4s := []*bgp.As4PathParam{as4param1}                                       
                                                                                         │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
                                                                                         │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
        UpdatePathAttrs4ByteAs(logger, msg)                                              │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:287                                            │ gobgp/internal/pkg/table/message_test.go:309                                             
                                                                                         │                                                                                          
        as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                   │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath}, nil).B │          as4 := []uint32{}                                                               
                                                                                         │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
                                                                                         │          param4s := []*bgp.As4PathParam{as4param1}                                       
                                                                                         │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
                                                                                         │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
        UpdatePathAttrs4ByteAs(logger, msg)                                              │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:287                                            │ gobgp/internal/pkg/table/message_test.go:81                                              
                                                                                         │                                                                                          
        as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                   │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath}, nil).B │          as4 := []uint32{400000, 300000, 40001}                                          
                                                                                         │          param4s := []*bgp.As4PathParam{bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ,
                                                                                         │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
                                                                                         │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
        UpdatePathAttrs4ByteAs(logger, msg)                                              │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:602                                                 │ gobgp/pkg/apiutil/attribute_test.go:509                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    "1.1.1.1",                                                     │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        esi := &api.EthernetSegmentIdentifier{                                           │          esi := &api.EthernetSegmentIdentifier{                                          
                Type:  0,                                                                │                  Type:  0,                                                               
                Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                                │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
        }                                                                                │          }                                                                               
        a, err := apb.New(&api.EVPNEthernetSegmentRoute{                                 │          a, err := apb.New(&api.EVPNMACIPAdvertisementRoute{                             
                Rd:        rd,                                                           │                  Rd:          rd,                                                        
                Esi:       esi,                                                          │                  Esi:         esi,                                                       
                IpAddress: "192.168.101.1",                                              │                  EthernetTag: 100,                                                       
                                                                                         │                  MacAddress:  "aa:bb:cc:dd:ee:ff",                                       
                                                                                         │                  IpAddress:   "192.168.101.1",                                           
                                                                                         │                  Labels:      []uint32{200},                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_L2VPN,                                      │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_EVPN,                                      │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:602                                                 │ gobgp/pkg/apiutil/attribute_test.go:649                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    "1.1.1.1",                                                     │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        esi := &api.EthernetSegmentIdentifier{                                           │          esi := &api.EthernetSegmentIdentifier{                                          
                Type:  0,                                                                │                  Type:  0,                                                               
                Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                                │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
        }                                                                                │          }                                                                               
        a, err := apb.New(&api.EVPNEthernetSegmentRoute{                                 │          a, err := apb.New(&api.EVPNIPPrefixRoute{                                       
                Rd:        rd,                                                           │                  Rd:          rd,                                                        
                Esi:       esi,                                                          │                  Esi:         esi,                                                       
                IpAddress: "192.168.101.1",                                              │                  EthernetTag: 100,                                                       
                                                                                         │                  IpPrefixLen: 24,                                                        
                                                                                         │                  IpPrefix:    "192.168.101.0",                                           
                                                                                         │                  Label:       200,                                                       
                                                                                         │                  GwAddress:   "172.16.101.1",                                            
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_L2VPN,                                      │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_EVPN,                                      │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:602                                                 │ gobgp/pkg/apiutil/attribute_test.go:461                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rd, err := apb.New(&api.RouteDistinguisherTwoOctetASN{                          
                Admin:    "1.1.1.1",                                                     │                  Admin:    65000,                                                        
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        esi := &api.EthernetSegmentIdentifier{                                           │          esi := &api.EthernetSegmentIdentifier{                                          
                Type:  0,                                                                │                  Type:  0,                                                               
                Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                                │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
        }                                                                                │          }                                                                               
        a, err := apb.New(&api.EVPNEthernetSegmentRoute{                                 │          a, err := apb.New(&api.EVPNEthernetAutoDiscoveryRoute{                          
                Rd:        rd,                                                           │                  Rd:          rd,                                                        
                Esi:       esi,                                                          │                  Esi:         esi,                                                       
                IpAddress: "192.168.101.1",                                              │                  EthernetTag: 100,                                                       
                                                                                         │                  Label:       200,                                                       
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_L2VPN,                                      │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_EVPN,                                      │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/packet/bgp/bgp_test.go:2942                                                   │ gobgp/pkg/packet/bgp/bgp_test.go:2975                                                    
[]byte{                                                                                  │  []byte{                                                                                 
                        0x00, 0x02, 0x00, 0x65, // Link NLRI, correct length             │                          0x00, 0x02, 0x00, 0x81, // Link NLRI, correct length            
                        0x02,                                           // Protocol ISIS │                          0x02,                                           // Protocol ISIS
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ID            │                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ID           
                        0x01, 0x00, 0x00, 0x22, // Local Node Desc                       │                          0x01, 0x00, 0x00, 0x22, // Local Node Desc                      
                        0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179 │                          0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179
                        0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID │                          0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID
                        0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area │                          0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area
                        0x02, 0x03, 0x00, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // T │                          0x02, 0x03, 0x00, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // T
                        0x01, 0x01, 0x00, 0x22, // Remote Node Desc                      │                          0x01, 0x01, 0x00, 0x22, // Remote Node Desc                     
                        0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179 │                          0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179
                        0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID │                          0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID
                        0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area │                          0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area
                        0x02, 0x03, 0x00, 0x06, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, // T │                          0x02, 0x03, 0x00, 0x06, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, // T
                        0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 │                          0x01, 0x05, 0x00, 0x10, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00
                                                                                         │                  }, "NLRI { LINK { LOCAL_NODE: 0102.0304.0506 REMOTE_NODE: 0605.0403.020 
 next prev up                                                                                                                                                                        
 gobgp/pkg/packet/bgp/bgp_test.go:2942                                                   │ gobgp/pkg/packet/bgp/bgp_test.go:2958                                                    
[]byte{                                                                                  │  []byte{                                                                                 
                        0x00, 0x02, 0x00, 0x65, // Link NLRI, correct length             │                          0x00, 0x02, 0x00, 0x69, // Link NLRI, correct length            
                        0x02,                                           // Protocol ISIS │                          0x02,                                           // Protocol ISIS
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ID            │                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ID           
                        0x01, 0x00, 0x00, 0x22, // Local Node Desc                       │                          0x01, 0x00, 0x00, 0x22, // Local Node Desc                      
                        0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179 │                          0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179
                        0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID │                          0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID
                        0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area │                          0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area
                        0x02, 0x03, 0x00, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // T │                          0x02, 0x03, 0x00, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // T
                        0x01, 0x01, 0x00, 0x22, // Remote Node Desc                      │                          0x01, 0x01, 0x00, 0x22, // Remote Node Desc                     
                        0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179 │                          0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179
                        0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID │                          0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID
                        0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area │                          0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area
                        0x02, 0x03, 0x00, 0x06, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, // T │                          0x02, 0x03, 0x00, 0x06, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, // T
                        0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 │                          0x01, 0x03, 0x00, 0x04, 0x01, 0x01, 0x01, 0x01, // IPv4 Interfac
                                                                                         │                  }, "NLRI { LINK { LOCAL_NODE: 0102.0304.0506 REMOTE_NODE: 0605.0403.020 
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:334                                                 │ gobgp/pkg/apiutil/attribute_test.go:289                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        a, err := apb.New(&api.LabeledIPAddressPrefix{                                   │          a, err := apb.New(&api.LabeledIPAddressPrefix{                                  
                Labels:    []uint32{100},                                                │                  Labels:    []uint32{100},                                               
                PrefixLen: 64,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "2001:db8:1::",                                               │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
        a, err = apb.New(&api.LabeledIPAddressPrefix{                                    │          a, err = apb.New(&api.LabeledIPAddressPrefix{                                   
                Labels:    []uint32{200},                                                │                  Labels:    []uint32{200},                                               
                PrefixLen: 64,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "2001:db8:2::",                                               │                  Prefix:    "192.168.201.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_MPLS_LABEL,                                │                          Safi: api.Family_SAFI_MPLS_LABEL,                               
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:60                                             │ gobgp/internal/pkg/table/message_test.go:235                                             
                                                                                         │                                                                                          
        as := []uint32{65000, 4000, 40000, 30000, 40001}                                 │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYP │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath}, nil).B │                                                                                          
        UpdatePathAttrs2ByteAs(msg)                                                      │          as4 := []uint32{100000, 65000, 4000, 400000, 300000, 40001}                     
                                                                                         │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
                                                                                         │          param4s := []*bgp.As4PathParam{as4param1}                                       
                                                                                         │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
                                                                                         │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
                                                                                         │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:60                                             │ gobgp/internal/pkg/table/message_test.go:261                                             
                                                                                         │                                                                                          
        as := []uint32{65000, 4000, 40000, 30000, 40001}                                 │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYP │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath}, nil).B │                                                                                          
        UpdatePathAttrs2ByteAs(msg)                                                      │          as4 := []uint32{300000, 40001}                                                  
                                                                                         │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
                                                                                         │          param4s := []*bgp.As4PathParam{as4param1}                                       
                                                                                         │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
                                                                                         │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
                                                                                         │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:60                                             │ gobgp/internal/pkg/table/message_test.go:309                                             
                                                                                         │                                                                                          
        as := []uint32{65000, 4000, 40000, 30000, 40001}                                 │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYP │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath}, nil).B │                                                                                          
        UpdatePathAttrs2ByteAs(msg)                                                      │          as4 := []uint32{}                                                               
                                                                                         │          as4param1 := bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, as4)             
                                                                                         │          param4s := []*bgp.As4PathParam{as4param1}                                       
                                                                                         │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
                                                                                         │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
                                                                                         │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:60                                             │ gobgp/internal/pkg/table/message_test.go:81                                              
                                                                                         │                                                                                          
        as := []uint32{65000, 4000, 40000, 30000, 40001}                                 │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYP │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath}, nil).B │                                                                                          
        UpdatePathAttrs2ByteAs(msg)                                                      │          as4 := []uint32{400000, 300000, 40001}                                          
                                                                                         │          param4s := []*bgp.As4PathParam{bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ,
                                                                                         │          as4path := bgp.NewPathAttributeAs4Path(param4s)                                 
                                                                                         │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath, as4path
                                                                                         │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/message_test.go:60                                             │ gobgp/internal/pkg/table/message_test.go:287                                             
                                                                                         │                                                                                          
        as := []uint32{65000, 4000, 40000, 30000, 40001}                                 │          as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001}                  
        params := []bgp.AsPathParamInterface{bgp.NewAs4PathParam(bgp.BGP_ASPATH_ATTR_TYP │          params := []bgp.AsPathParamInterface{bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE
        aspath := bgp.NewPathAttributeAsPath(params)                                     │          aspath := bgp.NewPathAttributeAsPath(params)                                    
                                                                                         │                                                                                          
        msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath}, nil).B │          msg := bgp.NewBGPUpdateMessage(nil, []bgp.PathAttributeInterface{aspath}, nil).B
        UpdatePathAttrs2ByteAs(msg)                                                      │          UpdatePathAttrs4ByteAs(logger, msg)                                             
        assert.Equal(t, len(msg.PathAttributes), 1)                                      │          assert.Equal(t, len(msg.PathAttributes), 1)                                     
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1)  │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value), 1) 
        assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(* │          assert.Equal(t, len(msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
        assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp. │          assert.Equal(t, msg.PathAttributes[0].(*bgp.PathAttributeAsPath).Value[0].(*bgp.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:141                                             │ gobgp/internal/pkg/table/policy_test.go:207                                              
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("2001::192:168:50:1")}         │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("2001::192:168:50:1")}        
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        mpnlri := []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::" │          mpnlri := []bgp.AddrPrefixInterface{bgp.NewIPv6AddrPrefix(64, "2001:123:123:1::"
        mpreach := bgp.NewPathAttributeMpReachNLRI("2001::192:168:50:1", mpnlri)         │          mpreach := bgp.NewPathAttributeMpReachNLRI("2001::192:168:50:1", mpnlri)        
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{mpreach, origin, aspath, med}     │          pathAttributes := []bgp.PathAttributeInterface{mpreach, origin, aspath, med}    
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nil)                   │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nil)                  
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // test                                                                          │          // test                                                                         
        pl1, _ := NewPrefix(config.Prefix{IpPrefix: "2001:123:123::/48", MasklengthRange │          pl1, _ := NewPrefix(config.Prefix{IpPrefix: "2001:123:123::/48", MasklengthRange
        match1 := pl1.Match(path)                                                        │          match1 := pl1.Match(path)                                                       
        assert.Equal(t, false, match1)                                                   │          assert.Equal(t, false, match1)                                                  
        pl2, _ := NewPrefix(config.Prefix{IpPrefix: "2001:123:123:1::/64", MasklengthRan │          pl2, _ := NewPrefix(config.Prefix{IpPrefix: "2001:123:123::/48", MasklengthRange
        match2 := pl2.Match(path)                                                        │          match2 := pl2.Match(path)                                                       
        assert.Equal(t, true, match2)                                                    │          assert.Equal(t, false, match2)                                                  
        pl3, _ := NewPrefix(config.Prefix{IpPrefix: "2001:123:123::/48", MasklengthRange │          pl3, _ := NewPrefix(config.Prefix{IpPrefix: "2001:123:123::/48", MasklengthRange
        match3 := pl3.Match(path)                                                        │          match3 := pl3.Match(path)                                                       
        assert.Equal(t, true, match3)                                                    │          assert.Equal(t, true, match3)                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/path_test.go:97                                                │ gobgp/internal/pkg/table/path_test.go:204                                                
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
                                                                                         │                                                                                          
                                                                                         │          asns := make([]uint16, 255)                                                     
                                                                                         │          for i := range asns {                                                           
                                                                                         │                  asns[i] = 65000 + uint16(i)                                             
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
        aspathParam := []bgp.AsPathParamInterface{                                       │          aspathParam := []bgp.AsPathParamInterface{                                      
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, []uint16{65001, 65002,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, asns),                 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                           │          nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                          
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{                                  │          pathAttributes := []bgp.PathAttributeInterface{                                 
                origin,                                                                  │                  origin,                                                                 
                aspath,                                                                  │                  aspath,                                                                 
                nexthop,                                                                 │                  nexthop,                                                                
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}               │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              
        bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                     │          bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                    
        update := bgpmsg.Body.(*bgp.BGPUpdate)                                           │          update := bgpmsg.Body.(*bgp.BGPUpdate)                                          
        UpdatePathAttrs4ByteAs(logger, update)                                           │          UpdatePathAttrs4ByteAs(logger, update)                                          
        peer := PathCreatePeer()                                                         │          peer := PathCreatePeer()                                                        
        p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(),  │          p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(), 
                                                                                         │                                                                                          
        p.PrependAsn(65000, 1, false)                                                    │          expected := []uint32{65000, 65000}                                              
        assert.Equal([]uint32{65000, 65001, 65002, 65003, 65004, 65005, 0, 0, 0}, p.GetA │          for _, v := range asns {                                                        
                                                                                         │                  expected = append(expected, uint32(v))                                  
                                                                                         │          }                                                                               
                                                                                         │          p.PrependAsn(65000, 2, false)                                                   
                                                                                         │          assert.Equal(append(expected, []uint32{0, 0, 0}...), p.GetAsSeqList())          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:788                                                 │ gobgp/pkg/apiutil/attribute_test.go:602                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rt, err := apb.New(&api.IPv4AddressSpecificExtended{                             │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                IsTransitive: true,                                                      │                  Admin:    "1.1.1.1",                                                    
                SubType:      0x02, // Route Target                                      │                  Assigned: 100,                                                          
                Address:      "1.1.1.1",                                                 │                                                                                          
                LocalAdmin:   100,                                                       │                                                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.RouteTargetMembershipNLRI{                                │          esi := &api.EthernetSegmentIdentifier{                                          
                Asn: 65000,                                                              │                  Type:  0,                                                               
                Rt:  rt,                                                                 │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
                                                                                         │          }                                                                               
                                                                                         │          a, err := apb.New(&api.EVPNEthernetSegmentRoute{                                
                                                                                         │                  Rd:        rd,                                                          
                                                                                         │                  Esi:       esi,                                                         
                                                                                         │                  IpAddress: "192.168.101.1",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_ROUTE_TARGET_CONSTRAINTS,                  │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/packet/bgp/bgp_test.go:2605                                                   │ gobgp/pkg/packet/bgp/bgp_test.go:2568                                                    
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        var tests = []struct {                                                           │          var tests = []struct {                                                          
                in        []byte                                                         │                  in        []byte                                                        
                want      string                                                         │                  want      string                                                        
                serialize bool                                                           │                  serialize bool                                                          
                err       bool                                                           │                  err       bool                                                          
        }{                                                                               │          }{                                                                              
                {[]byte{0x04, 0x89, 0x00, 0x03, 0x01, 0x88, 0x94}, `{"type":1161,"sid_la │                  {[]byte{0x04, 0x4b, 0x00, 0x07, 0x01, 0x01, 0x00, 0x00, 0x01, 0x88, 0x94
                {[]byte{0x04, 0x89, 0x00, 0x03, 0x0f, 0xff, 0xff}, `{"type":1161,"sid_la │                  {[]byte{0x04, 0x4b, 0x00, 0x07, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff
                {[]byte{0x04, 0x89, 0x00, 0x03, 0xff, 0xff, 0xff}, `{"type":1161,"sid_la │                  {[]byte{0x04, 0x4b, 0x00, 0x08, 0x01, 0x01, 0x00, 0x00, 0x04, 0x3B, 0x73
                {[]byte{0x04, 0x89, 0x00, 0x04, 0x04, 0x3B, 0x73, 0x49}, `{"type":1161," │                  {[]byte{0x04, 0x4b, 0x00, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x11}, "",
                {[]byte{0x04, 0x89, 0x00, 0x05, 0x01, 0x02, 0x03, 0x04, 0x05}, "", false │                  {[]byte{0xfe, 0xfe, 0x00, 0x07, 0x04, 0x3B, 0x73, 0x49, 0x05, 0x06, 0x07
                {[]byte{0xfe, 0xfe, 0x00, 0x04, 0x04, 0x3B, 0x73, 0x49}, "", false, true │                                                                                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        for _, test := range tests {                                                     │          for _, test := range tests {                                                    
                tlv := LsTLVSIDLabel{}                                                   │                  tlv := LsTLVAdjacencySID{}                                              
                if test.err {                                                            │                  if test.err {                                                           
                        assert.Error(tlv.DecodeFromBytes(test.in))                       │                          assert.Error(tlv.DecodeFromBytes(test.in))                      
                        continue                                                         │                          continue                                                        
                } else {                                                                 │                  } else {                                                                
                        assert.NoError(tlv.DecodeFromBytes(test.in))                     │                          assert.NoError(tlv.DecodeFromBytes(test.in))                    
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
                got, err := tlv.MarshalJSON()                                            │                  got, err := tlv.MarshalJSON()                                           
                assert.NoError(err)                                                      │                  assert.NoError(err)                                                     
                assert.Equal(got, []byte(test.want))                                     │                  assert.Equal(got, []byte(test.want))                                    
                                                                                         │                                                                                          
                if test.serialize {                                                      │                  if test.serialize {                                                     
                        s, err := tlv.Serialize()                                        │                          s, err := tlv.Serialize()                                       
                        assert.NoError(err)                                              │                          assert.NoError(err)                                             
                        assert.Equal(test.in, s)                                         │                          assert.Equal(test.in, s)                                        
                }                                                                        │                  }                                                                       
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/path_test.go:69                                                │ gobgp/internal/pkg/table/path_test.go:204                                                
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
                                                                                         │                                                                                          
                                                                                         │          asns := make([]uint16, 255)                                                     
                                                                                         │          for i := range asns {                                                           
                                                                                         │                  asns[i] = 65000 + uint16(i)                                             
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
        aspathParam := []bgp.AsPathParamInterface{                                       │          aspathParam := []bgp.AsPathParamInterface{                                      
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, []uint16{65001, 65002,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, asns),                 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                           │          nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                          
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │                                                                                          
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{                                  │          pathAttributes := []bgp.PathAttributeInterface{                                 
                origin,                                                                  │                  origin,                                                                 
                aspath,                                                                  │                  aspath,                                                                 
                nexthop,                                                                 │                  nexthop,                                                                
                med,                                                                     │                                                                                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}               │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              
        bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                     │          bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                    
        update := bgpmsg.Body.(*bgp.BGPUpdate)                                           │          update := bgpmsg.Body.(*bgp.BGPUpdate)                                          
        UpdatePathAttrs4ByteAs(logger, update)                                           │          UpdatePathAttrs4ByteAs(logger, update)                                          
        peer := PathCreatePeer()                                                         │          peer := PathCreatePeer()                                                        
        p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(),  │          p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(), 
        assert.Equal(10, p.GetAsPathLen())                                               │                                                                                          
                                                                                         │          expected := []uint32{65000, 65000}                                              
                                                                                         │          for _, v := range asns {                                                        
                                                                                         │                  expected = append(expected, uint32(v))                                  
                                                                                         │          }                                                                               
                                                                                         │          p.PrependAsn(65000, 2, false)                                                   
                                                                                         │          assert.Equal(append(expected, []uint32{0, 0, 0}...), p.GetAsSeqList())          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/path_test.go:69                                                │ gobgp/internal/pkg/table/path_test.go:97                                                 
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{                                       │          aspathParam := []bgp.AsPathParamInterface{                                      
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, []uint16{65001, 65002,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, []uint16{65001, 65002, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                           │          nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                          
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │                                                                                          
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{                                  │          pathAttributes := []bgp.PathAttributeInterface{                                 
                origin,                                                                  │                  origin,                                                                 
                aspath,                                                                  │                  aspath,                                                                 
                nexthop,                                                                 │                  nexthop,                                                                
                med,                                                                     │                                                                                          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}               │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              
        bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                     │          bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                    
        update := bgpmsg.Body.(*bgp.BGPUpdate)                                           │          update := bgpmsg.Body.(*bgp.BGPUpdate)                                          
        UpdatePathAttrs4ByteAs(logger, update)                                           │          UpdatePathAttrs4ByteAs(logger, update)                                          
        peer := PathCreatePeer()                                                         │          peer := PathCreatePeer()                                                        
        p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(),  │          p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(), 
        assert.Equal(10, p.GetAsPathLen())                                               │                                                                                          
                                                                                         │          p.PrependAsn(65000, 1, false)                                                   
                                                                                         │          assert.Equal([]uint32{65000, 65001, 65002, 65003, 65004, 65005, 0, 0, 0}, p.GetA
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:700                                                 │ gobgp/pkg/apiutil/attribute_test.go:509                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    "1.1.1.1",                                                     │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                                │          esi := &api.EthernetSegmentIdentifier{                                          
                Labels:    []uint32{100, 200},                                           │                  Type:  0,                                                               
                Rd:        rd,                                                           │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
                PrefixLen: 24,                                                           │          }                                                                               
                Prefix:    "192.168.101.0",                                              │          a, err := apb.New(&api.EVPNMACIPAdvertisementRoute{                             
                                                                                         │                  Rd:          rd,                                                        
                                                                                         │                  Esi:         esi,                                                       
                                                                                         │                  EthernetTag: 100,                                                       
                                                                                         │                  MacAddress:  "aa:bb:cc:dd:ee:ff",                                       
                                                                                         │                  IpAddress:   "192.168.101.1",                                           
                                                                                         │                  Labels:      []uint32{200},                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_MPLS_VPN,                                  │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:744                                                 │ gobgp/pkg/apiutil/attribute_test.go:509                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    "1.1.1.1",                                                     │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                                │          esi := &api.EthernetSegmentIdentifier{                                          
                Labels:    []uint32{100, 200},                                           │                  Type:  0,                                                               
                Rd:        rd,                                                           │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
                PrefixLen: 64,                                                           │          }                                                                               
                Prefix:    "2001:db8:1::",                                               │          a, err := apb.New(&api.EVPNMACIPAdvertisementRoute{                             
                                                                                         │                  Rd:          rd,                                                        
                                                                                         │                  Esi:         esi,                                                       
                                                                                         │                  EthernetTag: 100,                                                       
                                                                                         │                  MacAddress:  "aa:bb:cc:dd:ee:ff",                                       
                                                                                         │                  IpAddress:   "192.168.101.1",                                           
                                                                                         │                  Labels:      []uint32{200},                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_MPLS_VPN,                                  │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:700                                                 │ gobgp/pkg/apiutil/attribute_test.go:649                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    "1.1.1.1",                                                     │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                                │          esi := &api.EthernetSegmentIdentifier{                                          
                Labels:    []uint32{100, 200},                                           │                  Type:  0,                                                               
                Rd:        rd,                                                           │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
                PrefixLen: 24,                                                           │          }                                                                               
                Prefix:    "192.168.101.0",                                              │          a, err := apb.New(&api.EVPNIPPrefixRoute{                                       
                                                                                         │                  Rd:          rd,                                                        
                                                                                         │                  Esi:         esi,                                                       
                                                                                         │                  EthernetTag: 100,                                                       
                                                                                         │                  IpPrefixLen: 24,                                                        
                                                                                         │                  IpPrefix:    "192.168.101.0",                                           
                                                                                         │                  Label:       200,                                                       
                                                                                         │                  GwAddress:   "172.16.101.1",                                            
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_MPLS_VPN,                                  │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:744                                                 │ gobgp/pkg/apiutil/attribute_test.go:649                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    "1.1.1.1",                                                     │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                                │          esi := &api.EthernetSegmentIdentifier{                                          
                Labels:    []uint32{100, 200},                                           │                  Type:  0,                                                               
                Rd:        rd,                                                           │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
                PrefixLen: 64,                                                           │          }                                                                               
                Prefix:    "2001:db8:1::",                                               │          a, err := apb.New(&api.EVPNIPPrefixRoute{                                       
                                                                                         │                  Rd:          rd,                                                        
                                                                                         │                  Esi:         esi,                                                       
                                                                                         │                  EthernetTag: 100,                                                       
                                                                                         │                  IpPrefixLen: 24,                                                        
                                                                                         │                  IpPrefix:    "192.168.101.0",                                           
                                                                                         │                  Label:       200,                                                       
                                                                                         │                  GwAddress:   "172.16.101.1",                                            
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_MPLS_VPN,                                  │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:744                                                 │ gobgp/pkg/apiutil/attribute_test.go:461                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rd, err := apb.New(&api.RouteDistinguisherTwoOctetASN{                          
                Admin:    "1.1.1.1",                                                     │                  Admin:    65000,                                                        
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                                │          esi := &api.EthernetSegmentIdentifier{                                          
                Labels:    []uint32{100, 200},                                           │                  Type:  0,                                                               
                Rd:        rd,                                                           │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
                PrefixLen: 64,                                                           │          }                                                                               
                Prefix:    "2001:db8:1::",                                               │          a, err := apb.New(&api.EVPNEthernetAutoDiscoveryRoute{                          
                                                                                         │                  Rd:          rd,                                                        
                                                                                         │                  Esi:         esi,                                                       
                                                                                         │                  EthernetTag: 100,                                                       
                                                                                         │                  Label:       200,                                                       
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_MPLS_VPN,                                  │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:700                                                 │ gobgp/pkg/apiutil/attribute_test.go:602                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    "1.1.1.1",                                                     │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                                │          esi := &api.EthernetSegmentIdentifier{                                          
                Labels:    []uint32{100, 200},                                           │                  Type:  0,                                                               
                                                                                         │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
                                                                                         │          }                                                                               
                                                                                         │          a, err := apb.New(&api.EVPNEthernetSegmentRoute{                                
                Rd:        rd,                                                           │                  Rd:        rd,                                                          
                PrefixLen: 24,                                                           │                  Esi:       esi,                                                         
                Prefix:    "192.168.101.0",                                              │                  IpAddress: "192.168.101.1",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_MPLS_VPN,                                  │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:744                                                 │ gobgp/pkg/apiutil/attribute_test.go:602                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    "1.1.1.1",                                                     │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                                │          esi := &api.EthernetSegmentIdentifier{                                          
                Labels:    []uint32{100, 200},                                           │                  Type:  0,                                                               
                                                                                         │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
                                                                                         │          }                                                                               
                                                                                         │          a, err := apb.New(&api.EVPNEthernetSegmentRoute{                                
                Rd:        rd,                                                           │                  Rd:        rd,                                                          
                PrefixLen: 64,                                                           │                  Esi:       esi,                                                         
                Prefix:    "2001:db8:1::",                                               │                  IpAddress: "192.168.101.1",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_MPLS_VPN,                                  │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:700                                                 │ gobgp/pkg/apiutil/attribute_test.go:289                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          a, err := apb.New(&api.LabeledIPAddressPrefix{                                  
                Admin:    "1.1.1.1",                                                     │                  Labels:    []uint32{100},                                               
                Assigned: 100,                                                           │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                                │          nlris = append(nlris, a)                                                        
                Labels:    []uint32{100, 200},                                           │          a, err = apb.New(&api.LabeledIPAddressPrefix{                                   
                Rd:        rd,                                                           │                  Labels:    []uint32{200},                                               
                PrefixLen: 24,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "192.168.101.0",                                              │                  Prefix:    "192.168.201.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_MPLS_VPN,                                  │                          Safi: api.Family_SAFI_MPLS_LABEL,                               
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:744                                                 │ gobgp/pkg/apiutil/attribute_test.go:289                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          a, err := apb.New(&api.LabeledIPAddressPrefix{                                  
                Admin:    "1.1.1.1",                                                     │                  Labels:    []uint32{100},                                               
                Assigned: 100,                                                           │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                                │          nlris = append(nlris, a)                                                        
                Labels:    []uint32{100, 200},                                           │          a, err = apb.New(&api.LabeledIPAddressPrefix{                                   
                Rd:        rd,                                                           │                  Labels:    []uint32{200},                                               
                PrefixLen: 64,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "2001:db8:1::",                                               │                  Prefix:    "192.168.201.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_MPLS_VPN,                                  │                          Safi: api.Family_SAFI_MPLS_LABEL,                               
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:700                                                 │ gobgp/pkg/apiutil/attribute_test.go:334                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          a, err := apb.New(&api.LabeledIPAddressPrefix{                                  
                Admin:    "1.1.1.1",                                                     │                  Labels:    []uint32{100},                                               
                Assigned: 100,                                                           │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                                │          nlris = append(nlris, a)                                                        
                Labels:    []uint32{100, 200},                                           │          a, err = apb.New(&api.LabeledIPAddressPrefix{                                   
                Rd:        rd,                                                           │                  Labels:    []uint32{200},                                               
                PrefixLen: 24,                                                           │                  PrefixLen: 64,                                                          
                Prefix:    "192.168.101.0",                                              │                  Prefix:    "2001:db8:2::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_MPLS_VPN,                                  │                          Safi: api.Family_SAFI_MPLS_LABEL,                               
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"2001:db8::1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:744                                                 │ gobgp/pkg/apiutil/attribute_test.go:334                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          a, err := apb.New(&api.LabeledIPAddressPrefix{                                  
                Admin:    "1.1.1.1",                                                     │                  Labels:    []uint32{100},                                               
                Assigned: 100,                                                           │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                                │          nlris = append(nlris, a)                                                        
                Labels:    []uint32{100, 200},                                           │          a, err = apb.New(&api.LabeledIPAddressPrefix{                                   
                Rd:        rd,                                                           │                  Labels:    []uint32{200},                                               
                PrefixLen: 64,                                                           │                  PrefixLen: 64,                                                          
                Prefix:    "2001:db8:1::",                                               │                  Prefix:    "2001:db8:2::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_MPLS_VPN,                                  │                          Safi: api.Family_SAFI_MPLS_LABEL,                               
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"2001:db8::1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/packet/bgp/bgp_test.go:2643                                                   │ gobgp/pkg/packet/bgp/bgp_test.go:2568                                                    
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        var tests = []struct {                                                           │          var tests = []struct {                                                          
                in        []byte                                                         │                  in        []byte                                                        
                want      string                                                         │                  want      string                                                        
                serialize bool                                                           │                  serialize bool                                                          
                err       bool                                                           │                  err       bool                                                          
        }{                                                                               │          }{                                                                              
                {[]byte{0x04, 0x86, 0x00, 0x07, 0x01, 0x01, 0x00, 0x00, 0x01, 0x88, 0x94 │                  {[]byte{0x04, 0x4b, 0x00, 0x07, 0x01, 0x01, 0x00, 0x00, 0x01, 0x88, 0x94
                {[]byte{0x04, 0x86, 0x00, 0x07, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff │                  {[]byte{0x04, 0x4b, 0x00, 0x07, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff
                {[]byte{0x04, 0x86, 0x00, 0x08, 0x01, 0x01, 0x00, 0x00, 0x04, 0x3B, 0x73 │                  {[]byte{0x04, 0x4b, 0x00, 0x08, 0x01, 0x01, 0x00, 0x00, 0x04, 0x3B, 0x73
                {[]byte{0x04, 0x86, 0x00, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x11}, "", │                  {[]byte{0x04, 0x4b, 0x00, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x11}, "",
                {[]byte{0xfe, 0xfe, 0x00, 0x07, 0x04, 0x3B, 0x73, 0x49, 0x05, 0x06, 0x07 │                  {[]byte{0xfe, 0xfe, 0x00, 0x07, 0x04, 0x3B, 0x73, 0x49, 0x05, 0x06, 0x07
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        for _, test := range tests {                                                     │          for _, test := range tests {                                                    
                tlv := LsTLVPrefixSID{}                                                  │                  tlv := LsTLVAdjacencySID{}                                              
                if test.err {                                                            │                  if test.err {                                                           
                        assert.Error(tlv.DecodeFromBytes(test.in))                       │                          assert.Error(tlv.DecodeFromBytes(test.in))                      
                        continue                                                         │                          continue                                                        
                } else {                                                                 │                  } else {                                                                
                        assert.NoError(tlv.DecodeFromBytes(test.in))                     │                          assert.NoError(tlv.DecodeFromBytes(test.in))                    
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
                got, err := tlv.MarshalJSON()                                            │                  got, err := tlv.MarshalJSON()                                           
                assert.NoError(err)                                                      │                  assert.NoError(err)                                                     
                assert.Equal(got, []byte(test.want))                                     │                  assert.Equal(got, []byte(test.want))                                    
                                                                                         │                                                                                          
                if test.serialize {                                                      │                  if test.serialize {                                                     
                        s, err := tlv.Serialize()                                        │                          s, err := tlv.Serialize()                                       
                        assert.NoError(err)                                              │                          assert.NoError(err)                                             
                        assert.Equal(test.in, s)                                         │                          assert.Equal(test.in, s)                                        
                }                                                                        │                  }                                                                       
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:700                                                 │ gobgp/pkg/apiutil/attribute_test.go:788                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rt, err := apb.New(&api.IPv4AddressSpecificExtended{                            
                Admin:    "1.1.1.1",                                                     │                  IsTransitive: true,                                                     
                Assigned: 100,                                                           │                  SubType:      0x02, // Route Target                                     
                                                                                         │                  Address:      "1.1.1.1",                                                
                                                                                         │                  LocalAdmin:   100,                                                      
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                                │          a, err := apb.New(&api.RouteTargetMembershipNLRI{                               
                Labels:    []uint32{100, 200},                                           │                  Asn: 65000,                                                             
                Rd:        rd,                                                           │                  Rt:  rt,                                                                
                PrefixLen: 24,                                                           │                                                                                          
                Prefix:    "192.168.101.0",                                              │                                                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_MPLS_VPN,                                  │                          Safi: api.Family_SAFI_ROUTE_TARGET_CONSTRAINTS,                 
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:744                                                 │ gobgp/pkg/apiutil/attribute_test.go:788                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rt, err := apb.New(&api.IPv4AddressSpecificExtended{                            
                Admin:    "1.1.1.1",                                                     │                  IsTransitive: true,                                                     
                Assigned: 100,                                                           │                  SubType:      0x02, // Route Target                                     
                                                                                         │                  Address:      "1.1.1.1",                                                
                                                                                         │                  LocalAdmin:   100,                                                      
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                                │          a, err := apb.New(&api.RouteTargetMembershipNLRI{                               
                Labels:    []uint32{100, 200},                                           │                  Asn: 65000,                                                             
                Rd:        rd,                                                           │                  Rt:  rt,                                                                
                PrefixLen: 64,                                                           │                                                                                          
                Prefix:    "2001:db8:1::",                                               │                                                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_MPLS_VPN,                                  │                          Safi: api.Family_SAFI_ROUTE_TARGET_CONSTRAINTS,                 
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:744                                                 │ gobgp/pkg/apiutil/attribute_test.go:700                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherIPAddress{                             │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    "1.1.1.1",                                                     │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                                │          a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                               
                Labels:    []uint32{100, 200},                                           │                  Labels:    []uint32{100, 200},                                          
                Rd:        rd,                                                           │                  Rd:        rd,                                                          
                PrefixLen: 64,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "2001:db8:1::",                                               │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_MPLS_VPN,                                  │                          Safi: api.Family_SAFI_MPLS_VPN,                                 
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:559                                                 │ gobgp/pkg/apiutil/attribute_test.go:509                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherFourOctetASN{                          │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    65000,                                                         │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.EVPNInclusiveMulticastEthernetTagRoute{                   │          esi := &api.EthernetSegmentIdentifier{                                          
                                                                                         │                  Type:  0,                                                               
                                                                                         │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
                                                                                         │          }                                                                               
                                                                                         │          a, err := apb.New(&api.EVPNMACIPAdvertisementRoute{                             
                Rd:          rd,                                                         │                  Rd:          rd,                                                        
                                                                                         │                  Esi:         esi,                                                       
                EthernetTag: 100,                                                        │                  EthernetTag: 100,                                                       
                                                                                         │                  MacAddress:  "aa:bb:cc:dd:ee:ff",                                       
                IpAddress:   "192.168.101.1",                                            │                  IpAddress:   "192.168.101.1",                                           
                                                                                         │                  Labels:      []uint32{200},                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_L2VPN,                                      │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_EVPN,                                      │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:559                                                 │ gobgp/pkg/apiutil/attribute_test.go:649                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherFourOctetASN{                          │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    65000,                                                         │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.EVPNInclusiveMulticastEthernetTagRoute{                   │          esi := &api.EthernetSegmentIdentifier{                                          
                                                                                         │                  Type:  0,                                                               
                                                                                         │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
                                                                                         │          }                                                                               
                                                                                         │          a, err := apb.New(&api.EVPNIPPrefixRoute{                                       
                Rd:          rd,                                                         │                  Rd:          rd,                                                        
                                                                                         │                  Esi:         esi,                                                       
                EthernetTag: 100,                                                        │                  EthernetTag: 100,                                                       
                IpAddress:   "192.168.101.1",                                            │                  IpPrefixLen: 24,                                                        
                                                                                         │                  IpPrefix:    "192.168.101.0",                                           
                                                                                         │                  Label:       200,                                                       
                                                                                         │                  GwAddress:   "172.16.101.1",                                            
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_L2VPN,                                      │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_EVPN,                                      │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:559                                                 │ gobgp/pkg/apiutil/attribute_test.go:461                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherFourOctetASN{                          │          rd, err := apb.New(&api.RouteDistinguisherTwoOctetASN{                          
                Admin:    65000,                                                         │                  Admin:    65000,                                                        
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.EVPNInclusiveMulticastEthernetTagRoute{                   │          esi := &api.EthernetSegmentIdentifier{                                          
                                                                                         │                  Type:  0,                                                               
                                                                                         │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
                                                                                         │          }                                                                               
                                                                                         │          a, err := apb.New(&api.EVPNEthernetAutoDiscoveryRoute{                          
                Rd:          rd,                                                         │                  Rd:          rd,                                                        
                                                                                         │                  Esi:         esi,                                                       
                EthernetTag: 100,                                                        │                  EthernetTag: 100,                                                       
                IpAddress:   "192.168.101.1",                                            │                  Label:       200,                                                       
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_L2VPN,                                      │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_EVPN,                                      │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:559                                                 │ gobgp/pkg/apiutil/attribute_test.go:602                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 1)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        rd, err := apb.New(&api.RouteDistinguisherFourOctetASN{                          │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Admin:    65000,                                                         │                  Admin:    "1.1.1.1",                                                    
                Assigned: 100,                                                           │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        a, err := apb.New(&api.EVPNInclusiveMulticastEthernetTagRoute{                   │          esi := &api.EthernetSegmentIdentifier{                                          
                Rd:          rd,                                                         │                  Type:  0,                                                               
                EthernetTag: 100,                                                        │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
                IpAddress:   "192.168.101.1",                                            │          }                                                                               
                                                                                         │          a, err := apb.New(&api.EVPNEthernetSegmentRoute{                                
                                                                                         │                  Rd:        rd,                                                          
                                                                                         │                  Esi:       esi,                                                         
                                                                                         │                  IpAddress: "192.168.101.1",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_L2VPN,                                      │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_EVPN,                                      │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(1, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:246                                                 │ gobgp/pkg/apiutil/attribute_test.go:602                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.IPAddressPrefix{                                          │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                PrefixLen: 64,                                                           │                  Admin:    "1.1.1.1",                                                    
                Prefix:    "2001:db8:1::",                                               │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          esi := &api.EthernetSegmentIdentifier{                                          
        a, err = apb.New(&api.IPAddressPrefix{                                           │                  Type:  0,                                                               
                PrefixLen: 64,                                                           │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
                Prefix:    "2001:db8:2::",                                               │          }                                                                               
                                                                                         │          a, err := apb.New(&api.EVPNEthernetSegmentRoute{                                
                                                                                         │                  Rd:        rd,                                                          
                                                                                         │                  Esi:       esi,                                                         
                                                                                         │                  IpAddress: "192.168.101.1",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_UNICAST,                                   │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1", "fe80::1"},                            │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:246                                                 │ gobgp/pkg/apiutil/attribute_test.go:289                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        a, err := apb.New(&api.IPAddressPrefix{                                          │          a, err := apb.New(&api.LabeledIPAddressPrefix{                                  
                PrefixLen: 64,                                                           │                  Labels:    []uint32{100},                                               
                Prefix:    "2001:db8:1::",                                               │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
        a, err = apb.New(&api.IPAddressPrefix{                                           │          a, err = apb.New(&api.LabeledIPAddressPrefix{                                   
                PrefixLen: 64,                                                           │                  Labels:    []uint32{200},                                               
                Prefix:    "2001:db8:2::",                                               │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.201.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_UNICAST,                                   │                          Safi: api.Family_SAFI_MPLS_LABEL,                               
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1", "fe80::1"},                            │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:246                                                 │ gobgp/pkg/apiutil/attribute_test.go:334                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        a, err := apb.New(&api.IPAddressPrefix{                                          │          a, err := apb.New(&api.LabeledIPAddressPrefix{                                  
                                                                                         │                  Labels:    []uint32{100},                                               
                PrefixLen: 64,                                                           │                  PrefixLen: 64,                                                          
                Prefix:    "2001:db8:1::",                                               │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
        a, err = apb.New(&api.IPAddressPrefix{                                           │          a, err = apb.New(&api.LabeledIPAddressPrefix{                                   
                                                                                         │                  Labels:    []uint32{200},                                               
                PrefixLen: 64,                                                           │                  PrefixLen: 64,                                                          
                Prefix:    "2001:db8:2::",                                               │                  Prefix:    "2001:db8:2::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_UNICAST,                                   │                          Safi: api.Family_SAFI_MPLS_LABEL,                               
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1", "fe80::1"},                            │                  NextHops: []string{"2001:db8::1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:246                                                 │ gobgp/pkg/apiutil/attribute_test.go:788                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.IPAddressPrefix{                                          │          rt, err := apb.New(&api.IPv4AddressSpecificExtended{                            
                PrefixLen: 64,                                                           │                  IsTransitive: true,                                                     
                Prefix:    "2001:db8:1::",                                               │                  SubType:      0x02, // Route Target                                     
                                                                                         │                  Address:      "1.1.1.1",                                                
                                                                                         │                  LocalAdmin:   100,                                                      
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          a, err := apb.New(&api.RouteTargetMembershipNLRI{                               
        a, err = apb.New(&api.IPAddressPrefix{                                           │                  Asn: 65000,                                                             
                PrefixLen: 64,                                                           │                  Rt:  rt,                                                                
                Prefix:    "2001:db8:2::",                                               │                                                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_UNICAST,                                   │                          Safi: api.Family_SAFI_ROUTE_TARGET_CONSTRAINTS,                 
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1", "fe80::1"},                            │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:246                                                 │ gobgp/pkg/apiutil/attribute_test.go:700                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.IPAddressPrefix{                                          │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                PrefixLen: 64,                                                           │                  Admin:    "1.1.1.1",                                                    
                Prefix:    "2001:db8:1::",                                               │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                               
        a, err = apb.New(&api.IPAddressPrefix{                                           │                  Labels:    []uint32{100, 200},                                          
                PrefixLen: 64,                                                           │                  Rd:        rd,                                                          
                Prefix:    "2001:db8:2::",                                               │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_UNICAST,                                   │                          Safi: api.Family_SAFI_MPLS_VPN,                                 
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1", "fe80::1"},                            │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:246                                                 │ gobgp/pkg/apiutil/attribute_test.go:744                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.IPAddressPrefix{                                          │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                PrefixLen: 64,                                                           │                  Admin:    "1.1.1.1",                                                    
                Prefix:    "2001:db8:1::",                                               │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                               
        a, err = apb.New(&api.IPAddressPrefix{                                           │                  Labels:    []uint32{100, 200},                                          
                                                                                         │                  Rd:        rd,                                                          
                PrefixLen: 64,                                                           │                  PrefixLen: 64,                                                          
                Prefix:    "2001:db8:2::",                                               │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_UNICAST,                                   │                          Safi: api.Family_SAFI_MPLS_VPN,                                 
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1", "fe80::1"},                            │                  NextHops: []string{"2001:db8::1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/path_test.go:175                                               │ gobgp/internal/pkg/table/path_test.go:204                                                
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
                                                                                         │                                                                                          
                                                                                         │          asns := make([]uint16, 255)                                                     
                                                                                         │          for i := range asns {                                                           
                                                                                         │                  asns[i] = 65000 + uint16(i)                                             
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
        aspathParam := []bgp.AsPathParamInterface{                                       │          aspathParam := []bgp.AsPathParamInterface{                                      
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, []uint16{}),            │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, asns),                 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                           │          nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                          
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{                                  │          pathAttributes := []bgp.PathAttributeInterface{                                 
                origin,                                                                  │                  origin,                                                                 
                aspath,                                                                  │                  aspath,                                                                 
                nexthop,                                                                 │                  nexthop,                                                                
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}               │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              
        bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                     │          bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                    
        update := bgpmsg.Body.(*bgp.BGPUpdate)                                           │          update := bgpmsg.Body.(*bgp.BGPUpdate)                                          
        UpdatePathAttrs4ByteAs(logger, update)                                           │          UpdatePathAttrs4ByteAs(logger, update)                                          
        peer := PathCreatePeer()                                                         │          peer := PathCreatePeer()                                                        
        p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(),  │          p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(), 
                                                                                         │                                                                                          
        asn := uint32(65000)                                                             │          expected := []uint32{65000, 65000}                                              
        p.PrependAsn(asn, 1, false)                                                      │          for _, v := range asns {                                                        
        assert.Equal([]uint32{asn, 0, 0, 0}, p.GetAsSeqList())                           │                  expected = append(expected, uint32(v))                                  
                                                                                         │          }                                                                               
                                                                                         │          p.PrependAsn(65000, 2, false)                                                   
                                                                                         │          assert.Equal(append(expected, []uint32{0, 0, 0}...), p.GetAsSeqList())          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/path_test.go:175                                               │ gobgp/internal/pkg/table/path_test.go:97                                                 
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{                                       │          aspathParam := []bgp.AsPathParamInterface{                                      
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, []uint16{}),            │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, []uint16{65001, 65002, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                           │          nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                          
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{                                  │          pathAttributes := []bgp.PathAttributeInterface{                                 
                origin,                                                                  │                  origin,                                                                 
                aspath,                                                                  │                  aspath,                                                                 
                nexthop,                                                                 │                  nexthop,                                                                
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}               │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              
        bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                     │          bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                    
        update := bgpmsg.Body.(*bgp.BGPUpdate)                                           │          update := bgpmsg.Body.(*bgp.BGPUpdate)                                          
        UpdatePathAttrs4ByteAs(logger, update)                                           │          UpdatePathAttrs4ByteAs(logger, update)                                          
        peer := PathCreatePeer()                                                         │          peer := PathCreatePeer()                                                        
        p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(),  │          p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(), 
                                                                                         │                                                                                          
        asn := uint32(65000)                                                             │          p.PrependAsn(65000, 1, false)                                                   
        p.PrependAsn(asn, 1, false)                                                      │          assert.Equal([]uint32{65000, 65001, 65002, 65003, 65004, 65005, 0, 0, 0}, p.GetA
        assert.Equal([]uint32{asn, 0, 0, 0}, p.GetAsSeqList())                           │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/path_test.go:175                                               │ gobgp/internal/pkg/table/path_test.go:69                                                 
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{                                       │          aspathParam := []bgp.AsPathParamInterface{                                      
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, []uint16{}),            │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, []uint16{65001, 65002, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                           │          nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                          
                                                                                         │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{                                  │          pathAttributes := []bgp.PathAttributeInterface{                                 
                origin,                                                                  │                  origin,                                                                 
                aspath,                                                                  │                  aspath,                                                                 
                nexthop,                                                                 │                  nexthop,                                                                
                                                                                         │                  med,                                                                    
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}               │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              
        bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                     │          bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                    
        update := bgpmsg.Body.(*bgp.BGPUpdate)                                           │          update := bgpmsg.Body.(*bgp.BGPUpdate)                                          
        UpdatePathAttrs4ByteAs(logger, update)                                           │          UpdatePathAttrs4ByteAs(logger, update)                                          
        peer := PathCreatePeer()                                                         │          peer := PathCreatePeer()                                                        
        p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(),  │          p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(), 
                                                                                         │          assert.Equal(10, p.GetAsPathLen())                                              
        asn := uint32(65000)                                                             │                                                                                          
        p.PrependAsn(asn, 1, false)                                                      │                                                                                          
        assert.Equal([]uint32{asn, 0, 0, 0}, p.GetAsSeqList())                           │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:203                                                 │ gobgp/pkg/apiutil/attribute_test.go:289                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        a, err := apb.New(&api.IPAddressPrefix{                                          │          a, err := apb.New(&api.LabeledIPAddressPrefix{                                  
                                                                                         │                  Labels:    []uint32{100},                                               
                PrefixLen: 24,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "192.168.101.0",                                              │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
        a, err = apb.New(&api.IPAddressPrefix{                                           │          a, err = apb.New(&api.LabeledIPAddressPrefix{                                   
                                                                                         │                  Labels:    []uint32{200},                                               
                PrefixLen: 24,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "192.168.201.0",                                              │                  Prefix:    "192.168.201.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_UNICAST,                                   │                          Safi: api.Family_SAFI_MPLS_LABEL,                               
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:203                                                 │ gobgp/pkg/apiutil/attribute_test.go:334                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        a, err := apb.New(&api.IPAddressPrefix{                                          │          a, err := apb.New(&api.LabeledIPAddressPrefix{                                  
                PrefixLen: 24,                                                           │                  Labels:    []uint32{100},                                               
                Prefix:    "192.168.101.0",                                              │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
        a, err = apb.New(&api.IPAddressPrefix{                                           │          a, err = apb.New(&api.LabeledIPAddressPrefix{                                   
                PrefixLen: 24,                                                           │                  Labels:    []uint32{200},                                               
                Prefix:    "192.168.201.0",                                              │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:2::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_UNICAST,                                   │                          Safi: api.Family_SAFI_MPLS_LABEL,                               
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"2001:db8::1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:203                                                 │ gobgp/pkg/apiutil/attribute_test.go:788                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.IPAddressPrefix{                                          │          rt, err := apb.New(&api.IPv4AddressSpecificExtended{                            
                PrefixLen: 24,                                                           │                  IsTransitive: true,                                                     
                Prefix:    "192.168.101.0",                                              │                  SubType:      0x02, // Route Target                                     
                                                                                         │                  Address:      "1.1.1.1",                                                
                                                                                         │                  LocalAdmin:   100,                                                      
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          a, err := apb.New(&api.RouteTargetMembershipNLRI{                               
        a, err = apb.New(&api.IPAddressPrefix{                                           │                  Asn: 65000,                                                             
                PrefixLen: 24,                                                           │                  Rt:  rt,                                                                
                Prefix:    "192.168.201.0",                                              │                                                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_UNICAST,                                   │                          Safi: api.Family_SAFI_ROUTE_TARGET_CONSTRAINTS,                 
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:203                                                 │ gobgp/pkg/apiutil/attribute_test.go:700                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.IPAddressPrefix{                                          │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                PrefixLen: 24,                                                           │                  Admin:    "1.1.1.1",                                                    
                Prefix:    "192.168.101.0",                                              │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                               
        a, err = apb.New(&api.IPAddressPrefix{                                           │                  Labels:    []uint32{100, 200},                                          
                                                                                         │                  Rd:        rd,                                                          
                PrefixLen: 24,                                                           │                  PrefixLen: 24,                                                          
                Prefix:    "192.168.201.0",                                              │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_UNICAST,                                   │                          Safi: api.Family_SAFI_MPLS_VPN,                                 
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:203                                                 │ gobgp/pkg/apiutil/attribute_test.go:744                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.IPAddressPrefix{                                          │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                PrefixLen: 24,                                                           │                  Admin:    "1.1.1.1",                                                    
                Prefix:    "192.168.101.0",                                              │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                               
        a, err = apb.New(&api.IPAddressPrefix{                                           │                  Labels:    []uint32{100, 200},                                          
                PrefixLen: 24,                                                           │                  Rd:        rd,                                                          
                Prefix:    "192.168.201.0",                                              │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_UNICAST,                                   │                          Safi: api.Family_SAFI_MPLS_VPN,                                 
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"2001:db8::1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:203                                                 │ gobgp/pkg/apiutil/attribute_test.go:559                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.IPAddressPrefix{                                          │          rd, err := apb.New(&api.RouteDistinguisherFourOctetASN{                         
                PrefixLen: 24,                                                           │                  Admin:    65000,                                                        
                Prefix:    "192.168.101.0",                                              │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          a, err := apb.New(&api.EVPNInclusiveMulticastEthernetTagRoute{                  
        a, err = apb.New(&api.IPAddressPrefix{                                           │                  Rd:          rd,                                                        
                PrefixLen: 24,                                                           │                  EthernetTag: 100,                                                       
                Prefix:    "192.168.201.0",                                              │                  IpAddress:   "192.168.101.1",                                           
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_UNICAST,                                   │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:203                                                 │ gobgp/pkg/apiutil/attribute_test.go:246                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        a, err := apb.New(&api.IPAddressPrefix{                                          │          a, err := apb.New(&api.IPAddressPrefix{                                         
                PrefixLen: 24,                                                           │                  PrefixLen: 64,                                                          
                Prefix:    "192.168.101.0",                                              │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
        a, err = apb.New(&api.IPAddressPrefix{                                           │          a, err = apb.New(&api.IPAddressPrefix{                                          
                PrefixLen: 24,                                                           │                  PrefixLen: 64,                                                          
                Prefix:    "192.168.201.0",                                              │                  Prefix:    "2001:db8:2::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_UNICAST,                                   │                          Safi: api.Family_SAFI_UNICAST,                                  
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"2001:db8::1", "fe80::1"},                           
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/packet/bgp/bgp_test.go:2992                                                   │ gobgp/pkg/packet/bgp/bgp_test.go:2975                                                    
[]byte{                                                                                  │  []byte{                                                                                 
                        0x00, 0x02, 0x00, 0x59, // Link NLRI, correct length             │                          0x00, 0x02, 0x00, 0x81, // Link NLRI, correct length            
                        0x02,                                           // Protocol ISIS │                          0x02,                                           // Protocol ISIS
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ID            │                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ID           
                        0x01, 0x00, 0x00, 0x22, // Local Node Desc                       │                          0x01, 0x00, 0x00, 0x22, // Local Node Desc                      
                        0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179 │                          0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179
                        0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID │                          0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID
                        0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area │                          0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area
                        0x02, 0x03, 0x00, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // T │                          0x02, 0x03, 0x00, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // T
                        0x01, 0x01, 0x00, 0x22, // Remote Node Desc                      │                          0x01, 0x01, 0x00, 0x22, // Remote Node Desc                     
                        0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179 │                          0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179
                        0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID │                          0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID
                        0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area │                          0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area
                        0x02, 0x03, 0x00, 0x06, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, // T │                          0x02, 0x03, 0x00, 0x06, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, // T
                                                                                         │                          0x01, 0x06, 0x00, 0x10, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00
                                                                                         │                  }, "NLRI { LINK { LOCAL_NODE: 0102.0304.0506 REMOTE_NODE: 0605.0403.020 
 next prev up                                                                                                                                                                        
 gobgp/pkg/packet/bgp/bgp_test.go:2992                                                   │ gobgp/pkg/packet/bgp/bgp_test.go:2958                                                    
[]byte{                                                                                  │  []byte{                                                                                 
                        0x00, 0x02, 0x00, 0x59, // Link NLRI, correct length             │                          0x00, 0x02, 0x00, 0x69, // Link NLRI, correct length            
                        0x02,                                           // Protocol ISIS │                          0x02,                                           // Protocol ISIS
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ID            │                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ID           
                        0x01, 0x00, 0x00, 0x22, // Local Node Desc                       │                          0x01, 0x00, 0x00, 0x22, // Local Node Desc                      
                        0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179 │                          0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179
                        0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID │                          0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID
                        0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area │                          0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area
                        0x02, 0x03, 0x00, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // T │                          0x02, 0x03, 0x00, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // T
                        0x01, 0x01, 0x00, 0x22, // Remote Node Desc                      │                          0x01, 0x01, 0x00, 0x22, // Remote Node Desc                     
                        0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179 │                          0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179
                        0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID │                          0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID
                        0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area │                          0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area
                        0x02, 0x03, 0x00, 0x06, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, // T │                          0x02, 0x03, 0x00, 0x06, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, // T
                                                                                         │                          0x01, 0x04, 0x00, 0x04, 0x02, 0x02, 0x02, 0x02, // IPv4 Neighbor
                                                                                         │                  }, "NLRI { LINK { LOCAL_NODE: 0102.0304.0506 REMOTE_NODE: 0605.0403.020 
 next prev up                                                                                                                                                                        
 gobgp/pkg/packet/bgp/bgp_test.go:2992                                                   │ gobgp/pkg/packet/bgp/bgp_test.go:2942                                                    
[]byte{                                                                                  │  []byte{                                                                                 
                        0x00, 0x02, 0x00, 0x59, // Link NLRI, correct length             │                          0x00, 0x02, 0x00, 0x65, // Link NLRI, correct length            
                        0x02,                                           // Protocol ISIS │                          0x02,                                           // Protocol ISIS
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ID            │                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ID           
                        0x01, 0x00, 0x00, 0x22, // Local Node Desc                       │                          0x01, 0x00, 0x00, 0x22, // Local Node Desc                      
                        0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179 │                          0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179
                        0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID │                          0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID
                        0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area │                          0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area
                        0x02, 0x03, 0x00, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // T │                          0x02, 0x03, 0x00, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // T
                        0x01, 0x01, 0x00, 0x22, // Remote Node Desc                      │                          0x01, 0x01, 0x00, 0x22, // Remote Node Desc                     
                        0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179 │                          0x02, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV ASN: 1179
                        0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID │                          0x02, 0x01, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV BGP LS ID
                        0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area │                          0x02, 0x02, 0x00, 0x04, 0x07, 0x07, 0x07, 0x07, // TLV OSPF Area
                        0x02, 0x03, 0x00, 0x06, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, // T │                          0x02, 0x03, 0x00, 0x06, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, // T
                                                                                         │                  }, "NLRI { LINK { LOCAL_NODE: 0102.0304.0506 REMOTE_NODE: 0605.0403.020 
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/policy_test.go:51                                              │ gobgp/internal/pkg/table/policy_test.go:117                                              
                                                                                         │                                                                                          
        // create path                                                                   │          // create path                                                                  
        peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                   │          peer := &PeerInfo{AS: 65001, Address: net.ParseIP("10.0.0.1")}                  
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001}) │          aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65001})
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                               │          nexthop := bgp.NewPathAttributeNextHop("10.0.0.1")                              
        med := bgp.NewPathAttributeMultiExitDisc(0)                                      │          med := bgp.NewPathAttributeMultiExitDisc(0)                                     
        pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}     │          pathAttributes := []bgp.PathAttributeInterface{origin, aspath, nexthop, med}    
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.0")}                │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.0.101")}             
        updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                  │          updateMsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                 
        path := ProcessMessage(updateMsg, peer, time.Now())[0]                           │          path := ProcessMessage(updateMsg, peer, time.Now())[0]                          
        // test                                                                          │          // test                                                                         
        pl1, _ := NewPrefix(config.Prefix{IpPrefix: "10.10.0.0/24", MasklengthRange: ""} │          pl1, _ := NewPrefix(config.Prefix{IpPrefix: "10.10.0.0/16", MasklengthRange: "21
        match1 := pl1.Match(path)                                                        │          match1 := pl1.Match(path)                                                       
        assert.Equal(t, true, match1)                                                    │          assert.Equal(t, false, match1)                                                  
        pl2, _ := NewPrefix(config.Prefix{IpPrefix: "10.10.0.0/23", MasklengthRange: ""} │          pl2, _ := NewPrefix(config.Prefix{IpPrefix: "10.10.0.0/16", MasklengthRange: "25
        match2 := pl2.Match(path)                                                        │          match2 := pl2.Match(path)                                                       
        assert.Equal(t, false, match2)                                                   │          assert.Equal(t, false, match2)                                                  
        pl3, _ := NewPrefix(config.Prefix{IpPrefix: "10.10.0.0/16", MasklengthRange: "21 │          pl3, _ := NewPrefix(config.Prefix{IpPrefix: "10.10.0.0/16", MasklengthRange: "21
        match3 := pl3.Match(path)                                                        │          match3 := pl3.Match(path)                                                       
        assert.Equal(t, true, match3)                                                    │          assert.Equal(t, true, match3)                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/packet/bgp/bgp.go:5478                                                        │ gobgp/pkg/packet/bgp/bgp.go:5350                                                         
                                                                                         │                                                                                          
        if err := l.LsNLRI.DecodeFromBytes(data); err != nil {                           │          if err := l.LsNLRI.DecodeFromBytes(data); err != nil {                          
                return nil                                                               │                  return nil                                                              
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        tlv := data[lsNLRIHdrLen:]                                                       │          tlv := data[lsNLRIHdrLen:]                                                      
        m := make(map[LsTLVType]bool)                                                    │          m := make(map[LsTLVType]bool)                                                   
                                                                                         │                                                                                          
        for len(tlv) >= tlvHdrLen {                                                      │          for len(tlv) >= tlvHdrLen {                                                     
                sub := &LsTLV{}                                                          │                  sub := &LsTLV{}                                                         
                _, err := sub.DecodeFromBytes(tlv)                                       │                  _, err := sub.DecodeFromBytes(tlv)                                      
                if err != nil {                                                          │                  if err != nil {                                                         
                        return err                                                       │                          return err                                                      
                }                                                                        │                  }                                                                       
                m[sub.Type] = true                                                       │                  m[sub.Type] = true                                                      
                                                                                         │                                                                                          
                var subTLV LsTLVInterface                                                │                  var subTLV LsTLVInterface                                               
                switch sub.Type {                                                        │                  switch sub.Type {                                                       
                case LS_TLV_LOCAL_NODE_DESC:                                             │                  case LS_TLV_LOCAL_NODE_DESC:                                            
                        subTLV = &LsTLVNodeDescriptor{}                                  │                          subTLV = &LsTLVNodeDescriptor{}                                 
                case LS_TLV_OSPF_ROUTE_TYPE:                                             │                  case LS_TLV_OSPF_ROUTE_TYPE:                                            
                        subTLV = &LsTLVOspfRouteType{}                                   │                          subTLV = &LsTLVOspfRouteType{}                                  
                case LS_TLV_IP_REACH_INFO:                                               │                  case LS_TLV_IP_REACH_INFO:                                              
                        subTLV = &LsTLVIPReachability{}                                  │                          subTLV = &LsTLVIPReachability{}                                 
                                                                                         │                                                                                          
                default:                                                                 │                  default:                                                                
                        tlv = tlv[sub.Len():]                                            │                          tlv = tlv[sub.Len():]                                           
                        l.Length -= uint16(sub.Len())                                    │                          l.Length -= uint16(sub.Len())                                   
                        continue                                                         │                          continue                                                        
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
                if err := subTLV.DecodeFromBytes(tlv); err != nil {                      │                  if err := subTLV.DecodeFromBytes(tlv); err != nil {                     
                        return err                                                       │                          return err                                                      
                }                                                                        │                  }                                                                       
                tlv = tlv[subTLV.Len():]                                                 │                  tlv = tlv[subTLV.Len():]                                                
                                                                                         │                                                                                          
                switch sub.Type {                                                        │                  switch sub.Type {                                                       
                case LS_TLV_LOCAL_NODE_DESC:                                             │                  case LS_TLV_LOCAL_NODE_DESC:                                            
                        l.LocalNodeDesc = subTLV                                         │                          l.LocalNodeDesc = subTLV                                        
                default:                                                                 │                  default:                                                                
                        l.PrefixDesc = append(l.PrefixDesc, subTLV)                      │                          l.PrefixDesc = append(l.PrefixDesc, subTLV)                     
                }                                                                        │                  }                                                                       
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        required := []LsTLVType{LS_TLV_IP_REACH_INFO, LS_TLV_LOCAL_NODE_DESC}            │          required := []LsTLVType{LS_TLV_IP_REACH_INFO, LS_TLV_LOCAL_NODE_DESC}           
        for _, tlv := range required {                                                   │          for _, tlv := range required {                                                  
                if _, ok := m[tlv]; !ok {                                                │                  if _, ok := m[tlv]; !ok {                                               
                        return malformedAttrListErr("Required TLV missing")              │                          return malformedAttrListErr("Required TLV missing")             
                }                                                                        │                  }                                                                       
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
                                                                                         │          for _, tlv := range l.PrefixDesc {                                              
                                                                                         │                  switch v := tlv.(type) {                                                
                                                                                         │                  case *LsTLVIPReachability:                                              
                                                                                         │                          if v.PrefixLength > 8*net.IPv4len {                             
                                                                                         │                                  return malformedAttrListErr("Unexpected IP Reachability 
                                                                                         │                          }                                                               
                                                                                         │                  }                                                                       
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
        return nil                                                                       │          return nil                                                                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/packet/bgp/bgp.go:7189                                                        │ gobgp/pkg/packet/bgp/bgp.go:7075                                                         
                                                                                         │                                                                                          
        value, err := l.LsTLV.DecodeFromBytes(data)                                      │          value, err := l.LsTLV.DecodeFromBytes(data)                                     
        if err != nil {                                                                  │          if err != nil {                                                                 
                return err                                                               │                  return err                                                              
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        if l.Type != LS_TLV_SR_LOCAL_BLOCK {                                             │          if l.Type != LS_TLV_SR_CAPABILITIES {                                           
                return malformedAttrListErr("Unexpected TLV type")                       │                  return malformedAttrListErr("Unexpected TLV type")                      
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        if len(value) < 2 {                                                              │          if len(value) < 2 {                                                             
                return malformedAttrListErr("Incorrect SR Local Block length")           │                  return malformedAttrListErr("Incorrect SR Capabilities length")         
        }                                                                                │          }                                                                               
        l.Flags = value[0]                                                               │          l.Flags = value[0]                                                              
                                                                                         │                                                                                          
        // Skip two bytes: flags and reserved.                                           │          // Skip two bytes: flags and reserved.                                          
        value = value[2:]                                                                │          value = value[2:]                                                               
                                                                                         │                                                                                          
        // The value field should be at least eight bytes long. Three bytes              │          // The value field should be at least eight bytes long. Three bytes             
        // for the range size and five or six bytes for the SID/Label TLV.               │          // for the range size and five or six bytes for the SID/Label TLV.              
        for len(value) > 8 {                                                             │          for len(value) > 8 {                                                            
                // First, parse range size (3 bytes)                                     │                  // First, parse range size (3 bytes)                                    
                buf := []byte{0, 0, 0, 0}                                                │                  buf := []byte{0, 0, 0, 0}                                               
                for i := 1; i < len(buf); i++ {                                          │                  for i := 1; i < len(buf); i++ {                                         
                        buf[i] = value[i-1]                                              │                          buf[i] = value[i-1]                                             
                }                                                                        │                  }                                                                       
                r := binary.BigEndian.Uint32(buf)                                        │                  r := binary.BigEndian.Uint32(buf)                                       
                value = value[3:]                                                        │                  value = value[3:]                                                       
                                                                                         │                                                                                          
                // Second, parse SID/Label sub-TLV.                                      │                  // Second, parse SID/Label sub-TLV.                                     
                label := LsTLVSIDLabel{}                                                 │                  label := LsTLVSIDLabel{}                                                
                if err := label.DecodeFromBytes(value); err != nil {                     │                  if err := label.DecodeFromBytes(value); err != nil {                    
                        return err                                                       │                          return err                                                      
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
                l.Ranges = append(l.Ranges, LsSrLabelRange{                              │                  l.Ranges = append(l.Ranges, LsSrLabelRange{                             
                        Range:      r,                                                   │                          Range:      r,                                                  
                        FirstLabel: label,                                               │                          FirstLabel: label,                                              
                })                                                                       │                  })                                                                      
                                                                                         │                                                                                          
                value = value[label.Len():]                                              │                  value = value[label.Len():]                                             
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        if len(value) > 0 {                                                              │          if len(value) > 0 {                                                             
                return malformedAttrListErr("Malformed SR Local Block TLV")              │                  return malformedAttrListErr("Malformed SR Capabilities TLV")            
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        return nil                                                                       │          return nil                                                                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:420                                                 │ gobgp/pkg/apiutil/attribute_test.go:289                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          a, err := apb.New(&api.LabeledIPAddressPrefix{                                  
                Address: "2001:db8:1::1",                                                │                  Labels:    []uint32{100},                                               
                                                                                         │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
        a, err = apb.New(&api.EncapsulationNLRI{                                         │          a, err = apb.New(&api.LabeledIPAddressPrefix{                                   
                Address: "2001:db8:2::1",                                                │                  Labels:    []uint32{200},                                               
                                                                                         │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.201.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_MPLS_LABEL,                               
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:420                                                 │ gobgp/pkg/apiutil/attribute_test.go:334                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          a, err := apb.New(&api.LabeledIPAddressPrefix{                                  
                Address: "2001:db8:1::1",                                                │                  Labels:    []uint32{100},                                               
                                                                                         │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
        a, err = apb.New(&api.EncapsulationNLRI{                                         │          a, err = apb.New(&api.LabeledIPAddressPrefix{                                   
                Address: "2001:db8:2::1",                                                │                  Labels:    []uint32{200},                                               
                                                                                         │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:2::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_MPLS_LABEL,                               
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"2001:db8::1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:420                                                 │ gobgp/pkg/apiutil/attribute_test.go:788                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          rt, err := apb.New(&api.IPv4AddressSpecificExtended{                            
                Address: "2001:db8:1::1",                                                │                  IsTransitive: true,                                                     
                                                                                         │                  SubType:      0x02, // Route Target                                     
                                                                                         │                  Address:      "1.1.1.1",                                                
                                                                                         │                  LocalAdmin:   100,                                                      
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          a, err := apb.New(&api.RouteTargetMembershipNLRI{                               
        a, err = apb.New(&api.EncapsulationNLRI{                                         │                  Asn: 65000,                                                             
                Address: "2001:db8:2::1",                                                │                  Rt:  rt,                                                                
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_ROUTE_TARGET_CONSTRAINTS,                 
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:420                                                 │ gobgp/pkg/apiutil/attribute_test.go:700                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Address: "2001:db8:1::1",                                                │                  Admin:    "1.1.1.1",                                                    
                                                                                         │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                               
        a, err = apb.New(&api.EncapsulationNLRI{                                         │                  Labels:    []uint32{100, 200},                                          
                Address: "2001:db8:2::1",                                                │                  Rd:        rd,                                                          
                                                                                         │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_MPLS_VPN,                                 
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:420                                                 │ gobgp/pkg/apiutil/attribute_test.go:744                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Address: "2001:db8:1::1",                                                │                  Admin:    "1.1.1.1",                                                    
                                                                                         │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                               
        a, err = apb.New(&api.EncapsulationNLRI{                                         │                  Labels:    []uint32{100, 200},                                          
                Address: "2001:db8:2::1",                                                │                  Rd:        rd,                                                          
                                                                                         │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_MPLS_VPN,                                 
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"2001:db8::1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:420                                                 │ gobgp/pkg/apiutil/attribute_test.go:246                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          a, err := apb.New(&api.IPAddressPrefix{                                         
                Address: "2001:db8:1::1",                                                │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
        a, err = apb.New(&api.EncapsulationNLRI{                                         │          a, err = apb.New(&api.IPAddressPrefix{                                          
                Address: "2001:db8:2::1",                                                │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:2::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_UNICAST,                                  
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"2001:db8::1", "fe80::1"},                           
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:420                                                 │ gobgp/pkg/apiutil/attribute_test.go:203                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          a, err := apb.New(&api.IPAddressPrefix{                                         
                Address: "2001:db8:1::1",                                                │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
        a, err = apb.New(&api.EncapsulationNLRI{                                         │          a, err = apb.New(&api.IPAddressPrefix{                                          
                Address: "2001:db8:2::1",                                                │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.201.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP6,                                        │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_UNICAST,                                  
                },                                                                       │                  },                                                                      
                NextHops: []string{"2001:db8::1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:379                                                 │ gobgp/pkg/apiutil/attribute_test.go:602                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Address: "192.168.101.1",                                                │                  Admin:    "1.1.1.1",                                                    
                                                                                         │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          esi := &api.EthernetSegmentIdentifier{                                          
        a, err = apb.New(&api.EncapsulationNLRI{                                         │                  Type:  0,                                                               
                Address: "192.168.201.1",                                                │                  Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9},                               
                                                                                         │          }                                                                               
                                                                                         │          a, err := apb.New(&api.EVPNEthernetSegmentRoute{                                
                                                                                         │                  Rd:        rd,                                                          
                                                                                         │                  Esi:       esi,                                                         
                                                                                         │                  IpAddress: "192.168.101.1",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:379                                                 │ gobgp/pkg/apiutil/attribute_test.go:289                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          a, err := apb.New(&api.LabeledIPAddressPrefix{                                  
                Address: "192.168.101.1",                                                │                  Labels:    []uint32{100},                                               
                                                                                         │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
        a, err = apb.New(&api.EncapsulationNLRI{                                         │          a, err = apb.New(&api.LabeledIPAddressPrefix{                                   
                Address: "192.168.201.1",                                                │                  Labels:    []uint32{200},                                               
                                                                                         │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.201.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_MPLS_LABEL,                               
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:379                                                 │ gobgp/pkg/apiutil/attribute_test.go:334                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          a, err := apb.New(&api.LabeledIPAddressPrefix{                                  
                Address: "192.168.101.1",                                                │                  Labels:    []uint32{100},                                               
                                                                                         │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
        a, err = apb.New(&api.EncapsulationNLRI{                                         │          a, err = apb.New(&api.LabeledIPAddressPrefix{                                   
                Address: "192.168.201.1",                                                │                  Labels:    []uint32{200},                                               
                                                                                         │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:2::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_MPLS_LABEL,                               
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"2001:db8::1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:379                                                 │ gobgp/pkg/apiutil/attribute_test.go:788                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          rt, err := apb.New(&api.IPv4AddressSpecificExtended{                            
                Address: "192.168.101.1",                                                │                  IsTransitive: true,                                                     
                                                                                         │                  SubType:      0x02, // Route Target                                     
                                                                                         │                  Address:      "1.1.1.1",                                                
                                                                                         │                  LocalAdmin:   100,                                                      
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          a, err := apb.New(&api.RouteTargetMembershipNLRI{                               
        a, err = apb.New(&api.EncapsulationNLRI{                                         │                  Asn: 65000,                                                             
                Address: "192.168.201.1",                                                │                  Rt:  rt,                                                                
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_ROUTE_TARGET_CONSTRAINTS,                 
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:379                                                 │ gobgp/pkg/apiutil/attribute_test.go:700                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Address: "192.168.101.1",                                                │                  Admin:    "1.1.1.1",                                                    
                                                                                         │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                               
        a, err = apb.New(&api.EncapsulationNLRI{                                         │                  Labels:    []uint32{100, 200},                                          
                Address: "192.168.201.1",                                                │                  Rd:        rd,                                                          
                                                                                         │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_MPLS_VPN,                                 
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:379                                                 │ gobgp/pkg/apiutil/attribute_test.go:744                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          rd, err := apb.New(&api.RouteDistinguisherIPAddress{                            
                Address: "192.168.101.1",                                                │                  Admin:    "1.1.1.1",                                                    
                                                                                         │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          a, err := apb.New(&api.LabeledVPNIPAddressPrefix{                               
        a, err = apb.New(&api.EncapsulationNLRI{                                         │                  Labels:    []uint32{100, 200},                                          
                Address: "192.168.201.1",                                                │                  Rd:        rd,                                                          
                                                                                         │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_MPLS_VPN,                                 
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"2001:db8::1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:379                                                 │ gobgp/pkg/apiutil/attribute_test.go:559                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 1)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          rd, err := apb.New(&api.RouteDistinguisherFourOctetASN{                         
                Address: "192.168.101.1",                                                │                  Admin:    65000,                                                        
                                                                                         │                  Assigned: 100,                                                          
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          a, err := apb.New(&api.EVPNInclusiveMulticastEthernetTagRoute{                  
        a, err = apb.New(&api.EncapsulationNLRI{                                         │                  Rd:          rd,                                                        
                Address: "192.168.201.1",                                                │                  EthernetTag: 100,                                                       
                                                                                         │                  IpAddress:   "192.168.101.1",                                           
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_L2VPN,                                     
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_EVPN,                                     
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(1, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:379                                                 │ gobgp/pkg/apiutil/attribute_test.go:246                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          a, err := apb.New(&api.IPAddressPrefix{                                         
                Address: "192.168.101.1",                                                │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:1::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
        a, err = apb.New(&api.EncapsulationNLRI{                                         │          a, err = apb.New(&api.IPAddressPrefix{                                          
                Address: "192.168.201.1",                                                │                  PrefixLen: 64,                                                          
                                                                                         │                  Prefix:    "2001:db8:2::",                                              
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_UNICAST,                                  
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"2001:db8::1", "fe80::1"},                           
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:379                                                 │ gobgp/pkg/apiutil/attribute_test.go:203                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          a, err := apb.New(&api.IPAddressPrefix{                                         
                Address: "192.168.101.1",                                                │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.101.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
        a, err = apb.New(&api.EncapsulationNLRI{                                         │          a, err = apb.New(&api.IPAddressPrefix{                                          
                Address: "192.168.201.1",                                                │                  PrefixLen: 24,                                                          
                                                                                         │                  Prefix:    "192.168.201.0",                                             
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP,                                        
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_UNICAST,                                  
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"192.168.1.1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:379                                                 │ gobgp/pkg/apiutil/attribute_test.go:420                                                  
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        nlris := make([]*apb.Any, 0, 2)                                                  │          nlris := make([]*apb.Any, 0, 2)                                                 
        a, err := apb.New(&api.EncapsulationNLRI{                                        │          a, err := apb.New(&api.EncapsulationNLRI{                                       
                Address: "192.168.101.1",                                                │                  Address: "2001:db8:1::1",                                               
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
        a, err = apb.New(&api.EncapsulationNLRI{                                         │          a, err = apb.New(&api.EncapsulationNLRI{                                        
                Address: "192.168.201.1",                                                │                  Address: "2001:db8:2::1",                                               
        })                                                                               │          })                                                                              
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        nlris = append(nlris, a)                                                         │          nlris = append(nlris, a)                                                        
                                                                                         │                                                                                          
        input := &api.MpReachNLRIAttribute{                                              │          input := &api.MpReachNLRIAttribute{                                             
                Family: &api.Family{                                                     │                  Family: &api.Family{                                                    
                        Afi:  api.Family_AFI_IP,                                         │                          Afi:  api.Family_AFI_IP6,                                       
                        Safi: api.Family_SAFI_ENCAPSULATION,                             │                          Safi: api.Family_SAFI_ENCAPSULATION,                            
                },                                                                       │                  },                                                                      
                NextHops: []string{"192.168.1.1"},                                       │                  NextHops: []string{"2001:db8::1"},                                      
                Nlris:    nlris,                                                         │                  Nlris:    nlris,                                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        a, err = apb.New(input)                                                          │          a, err = apb.New(input)                                                         
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
        n, err := UnmarshalAttribute(a)                                                  │          n, err := UnmarshalAttribute(a)                                                 
        assert.Nil(err)                                                                  │          assert.Nil(err)                                                                 
                                                                                         │                                                                                          
        output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI) │          output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)
        assert.Equal(input.Family.Afi, output.Family.Afi)                                │          assert.Equal(input.Family.Afi, output.Family.Afi)                               
        assert.Equal(input.Family.Safi, output.Family.Safi)                              │          assert.Equal(input.Family.Safi, output.Family.Safi)                             
        assert.Equal(input.NextHops, output.NextHops)                                    │          assert.Equal(input.NextHops, output.NextHops)                                   
        assert.Equal(2, len(output.Nlris))                                               │          assert.Equal(2, len(output.Nlris))                                              
        for idx, inputNLRI := range input.Nlris {                                        │          for idx, inputNLRI := range input.Nlris {                                       
                outputNLRI := output.Nlris[idx]                                          │                  outputNLRI := output.Nlris[idx]                                         
                assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                      │                  assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl)                     
                assert.Equal(inputNLRI.Value, outputNLRI.Value)                          │                  assert.Equal(inputNLRI.Value, outputNLRI.Value)                         
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/packet/bgp/bgp_test.go:2070                                                   │ gobgp/pkg/packet/bgp/bgp_test.go:2103                                                    
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
                                                                                         │                                                                                          
        var tests = []struct {                                                           │          var tests = []struct {                                                          
                in   []byte                                                              │                  in   []byte                                                             
                want string                                                              │                  want string                                                             
                err  bool                                                                │                  err  bool                                                               
        }{                                                                               │          }{                                                                              
                {[]byte{0x04, 0x41, 0x00, 0x04, 0x43, 0xA4, 0xB2, 0x00}, `{"type":1089," │                  {[]byte{0x04, 0x42, 0x00, 0x04, 0x43, 0xA4, 0xB2, 0x00}, `{"type":1090,"
                {[]byte{0x04, 0x41, 0x00, 0x04, 0x43, 0xA4, 0xB2, 0x00, 0xFF}, `{"type": │                  {[]byte{0x04, 0x42, 0x00, 0x04, 0x43, 0xA4, 0xB2, 0x00, 0xFF}, `{"type":
                {[]byte{0x04, 0x41, 0x00, 0x03, 0x07, 0x07, 0x07}, "", true},            │                  {[]byte{0x04, 0x42, 0x00, 0x03, 0x07, 0x07, 0x07}, "", true},           
                {[]byte{0x04, 0x41, 0x00, 0x04, 0x7f, 0x80, 0x00, 0x00}, "", true}, // + │                  {[]byte{0x04, 0x42, 0x00, 0x04, 0x7f, 0x80, 0x00, 0x00}, "", true}, // +
                {[]byte{0x04, 0x41, 0x00, 0x04, 0xff, 0x80, 0x00, 0x00}, "", true}, // - │                  {[]byte{0x04, 0x42, 0x00, 0x04, 0xff, 0x80, 0x00, 0x00}, "", true}, // -
                {[]byte{0x04, 0x41, 0x00, 0x04, 0xff, 0xbf, 0xff, 0xff}, "", true}, // N │                  {[]byte{0x04, 0x42, 0x00, 0x04, 0xff, 0xbf, 0xff, 0xff}, "", true}, // N
                {[]byte{0x04, 0x41, 0x00, 0x04, 0xc2, 0xc8, 0x00, 0x00}, "", true}, // - │                  {[]byte{0x04, 0x42, 0x00, 0x04, 0xc2, 0xc8, 0x00, 0x00}, "", true}, // -
                {[]byte{0xfe, 0xfe, 0x00, 0x00}, "", true},                              │                  {[]byte{0xfe, 0xfe, 0x00, 0x00}, "", true},                             
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        for _, test := range tests {                                                     │          for _, test := range tests {                                                    
                tlv := LsTLVMaxLinkBw{}                                                  │                  tlv := LsTLVMaxReservableLinkBw{}                                       
                if test.err {                                                            │                  if test.err {                                                           
                        assert.Error(tlv.DecodeFromBytes(test.in))                       │                          assert.Error(tlv.DecodeFromBytes(test.in))                      
                        continue                                                         │                          continue                                                        
                } else {                                                                 │                  } else {                                                                
                        assert.NoError(tlv.DecodeFromBytes(test.in))                     │                          assert.NoError(tlv.DecodeFromBytes(test.in))                    
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
                got, err := tlv.MarshalJSON()                                            │                  got, err := tlv.MarshalJSON()                                           
                assert.NoError(err)                                                      │                  assert.NoError(err)                                                     
                assert.Equal(got, []byte(test.want))                                     │                  assert.Equal(got, []byte(test.want))                                    
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:1629                                                │ gobgp/pkg/apiutil/attribute_test.go:1595                                                 
                                                                                         │                                                                                          
        tests := []struct {                                                              │          tests := []struct {                                                             
                name  string                                                             │                  name  string                                                            
                input []byte                                                             │                  input []byte                                                            
        }{                                                                               │          }{                                                                              
                {                                                                        │                  {                                                                       
                        name:  "srv6 prefix sid",                                        │                          name:  "srv6 prefix sid",                                       
                        input: []byte{0x01, 0x00, 0x06, 0x28, 0x18, 0x10, 0x00, 0x10, 0x │                          input: []byte{0xc0, 0x28, 0x25, 0x05, 0x00, 0x22, 0x00, 0x01, 0x
                },                                                                       │                  },                                                                      
        }                                                                                │          }                                                                               
        for _, tt := range tests {                                                       │          for _, tt := range tests {                                                      
                t.Run(tt.name, func(t *testing.T) {                                      │                  t.Run(tt.name, func(t *testing.T) {                                     
                        sstlv := bgp.SRv6SIDStructureSubSubTLV{}                         │                          attribute := bgp.PathAttributePrefixSID{}                       
                        if err := sstlv.DecodeFromBytes(tt.input); err != nil {          │                          if err := attribute.DecodeFromBytes(tt.input); err != nil {     
                                t.Fatalf("test failed with error: %+v", err)             │                                  t.Fatalf("test failed with error: %+v", err)            
                        }                                                                │                          }                                                               
                        // Converting from Native to API                                 │                          // Converting from Native to API                                
                        apiPrefixSID, _ := MarshalSRv6SubSubTLVs([]bgp.PrefixSIDTLVInter │                          apiPrefixSID, _ := NewPrefixSIDAttributeFromNative(&attribute)  
                        // Converting back from API to Native                            │                          // Converting back from API to Native                           
                        _, recoveredPrefixSID, err := UnmarshalSubSubTLVs(apiPrefixSID)  │                          recoveredPrefixSID, err := UnmarshalPrefixSID(apiPrefixSID)     
                        if err != nil {                                                  │                          if err != nil {                                                 
                                t.Fatalf("test failed with error: %+v", err)             │                                  t.Fatalf("test failed with error: %+v", err)            
                        }                                                                │                          }                                                               
                        recovered, err := recoveredPrefixSID[0].Serialize()              │                          recovered, err := recoveredPrefixSID.Serialize()                
                        if err != nil {                                                  │                          if err != nil {                                                 
                                t.Fatalf("test failed with error: %+v", err)             │                                  t.Fatalf("test failed with error: %+v", err)            
                        }                                                                │                          }                                                               
                        if !bytes.Equal(tt.input, recovered) {                           │                          if !bytes.Equal(tt.input, recovered) {                          
                                t.Fatalf("round trip conversion test failed as expected  │                                  t.Fatalf("round trip conversion test failed as expected 
                        }                                                                │                          }                                                               
                })                                                                       │                  })                                                                      
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/pkg/apiutil/attribute_test.go:1629                                                │ gobgp/pkg/apiutil/attribute_test.go:1663                                                 
                                                                                         │                                                                                          
        tests := []struct {                                                              │          tests := []struct {                                                             
                name  string                                                             │                  name  string                                                            
                input []byte                                                             │                  input []byte                                                            
        }{                                                                               │          }{                                                                              
                {                                                                        │                  {                                                                       
                        name:  "srv6 prefix sid",                                        │                          name:  "srv6 prefix sid informationw sub tlv",                  
                        input: []byte{0x01, 0x00, 0x06, 0x28, 0x18, 0x10, 0x00, 0x10, 0x │                          input: []byte{0x01, 0x00, 0x1e, 0x00, 0x20, 0x01, 0x00, 0x00, 0x
                },                                                                       │                  },                                                                      
        }                                                                                │          }                                                                               
        for _, tt := range tests {                                                       │          for _, tt := range tests {                                                      
                t.Run(tt.name, func(t *testing.T) {                                      │                  t.Run(tt.name, func(t *testing.T) {                                     
                        sstlv := bgp.SRv6SIDStructureSubSubTLV{}                         │                          stlv := bgp.SRv6InformationSubTLV{}                             
                        if err := sstlv.DecodeFromBytes(tt.input); err != nil {          │                          if err := stlv.DecodeFromBytes(tt.input); err != nil {          
                                t.Fatalf("test failed with error: %+v", err)             │                                  t.Fatalf("test failed with error: %+v", err)            
                        }                                                                │                          }                                                               
                        // Converting from Native to API                                 │                          // Converting from Native to API                                
                        apiPrefixSID, _ := MarshalSRv6SubSubTLVs([]bgp.PrefixSIDTLVInter │                          apiPrefixSID, _ := MarshalSRv6SubTLVs([]bgp.PrefixSIDTLVInterfac
                        // Converting back from API to Native                            │                          // Converting back from API to Native                           
                        _, recoveredPrefixSID, err := UnmarshalSubSubTLVs(apiPrefixSID)  │                          _, recoveredPrefixSID, err := UnmarshalSubTLVs(apiPrefixSID)    
                        if err != nil {                                                  │                          if err != nil {                                                 
                                t.Fatalf("test failed with error: %+v", err)             │                                  t.Fatalf("test failed with error: %+v", err)            
                        }                                                                │                          }                                                               
                        recovered, err := recoveredPrefixSID[0].Serialize()              │                          recovered, err := recoveredPrefixSID[0].Serialize()             
                        if err != nil {                                                  │                          if err != nil {                                                 
                                t.Fatalf("test failed with error: %+v", err)             │                                  t.Fatalf("test failed with error: %+v", err)            
                        }                                                                │                          }                                                               
                        if !bytes.Equal(tt.input, recovered) {                           │                          if !bytes.Equal(tt.input, recovered) {                          
                                t.Fatalf("round trip conversion test failed as expected  │                                  t.Fatalf("round trip conversion test failed as expected 
                        }                                                                │                          }                                                               
                })                                                                       │                  })                                                                      
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/path_test.go:147                                               │ gobgp/internal/pkg/table/path_test.go:204                                                
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
                                                                                         │                                                                                          
                                                                                         │          asns := make([]uint16, 255)                                                     
                                                                                         │          for i := range asns {                                                           
                                                                                         │                  asns[i] = 65000 + uint16(i)                                             
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
        aspathParam := []bgp.AsPathParamInterface{                                       │          aspathParam := []bgp.AsPathParamInterface{                                      
                                                                                         │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, asns),                 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                           │          nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                          
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{                                  │          pathAttributes := []bgp.PathAttributeInterface{                                 
                origin,                                                                  │                  origin,                                                                 
                aspath,                                                                  │                  aspath,                                                                 
                nexthop,                                                                 │                  nexthop,                                                                
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}               │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              
        bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                     │          bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                    
        update := bgpmsg.Body.(*bgp.BGPUpdate)                                           │          update := bgpmsg.Body.(*bgp.BGPUpdate)                                          
        UpdatePathAttrs4ByteAs(logger, update)                                           │          UpdatePathAttrs4ByteAs(logger, update)                                          
        peer := PathCreatePeer()                                                         │          peer := PathCreatePeer()                                                        
        p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(),  │          p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(), 
                                                                                         │                                                                                          
        asn := uint32(65000)                                                             │          expected := []uint32{65000, 65000}                                              
        p.PrependAsn(asn, 1, false)                                                      │          for _, v := range asns {                                                        
        assert.Equal([]uint32{asn, 0, 0, 0}, p.GetAsSeqList())                           │                  expected = append(expected, uint32(v))                                  
                                                                                         │          }                                                                               
                                                                                         │          p.PrependAsn(65000, 2, false)                                                   
                                                                                         │          assert.Equal(append(expected, []uint32{0, 0, 0}...), p.GetAsSeqList())          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/path_test.go:147                                               │ gobgp/internal/pkg/table/path_test.go:97                                                 
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{                                       │          aspathParam := []bgp.AsPathParamInterface{                                      
                                                                                         │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, []uint16{65001, 65002, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                           │          nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                          
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{                                  │          pathAttributes := []bgp.PathAttributeInterface{                                 
                origin,                                                                  │                  origin,                                                                 
                aspath,                                                                  │                  aspath,                                                                 
                nexthop,                                                                 │                  nexthop,                                                                
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}               │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              
        bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                     │          bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                    
        update := bgpmsg.Body.(*bgp.BGPUpdate)                                           │          update := bgpmsg.Body.(*bgp.BGPUpdate)                                          
        UpdatePathAttrs4ByteAs(logger, update)                                           │          UpdatePathAttrs4ByteAs(logger, update)                                          
        peer := PathCreatePeer()                                                         │          peer := PathCreatePeer()                                                        
        p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(),  │          p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(), 
                                                                                         │                                                                                          
        asn := uint32(65000)                                                             │          p.PrependAsn(65000, 1, false)                                                   
        p.PrependAsn(asn, 1, false)                                                      │          assert.Equal([]uint32{65000, 65001, 65002, 65003, 65004, 65005, 0, 0, 0}, p.GetA
        assert.Equal([]uint32{asn, 0, 0, 0}, p.GetAsSeqList())                           │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 gobgp/internal/pkg/table/path_test.go:147                                               │ gobgp/internal/pkg/table/path_test.go:175                                                
                                                                                         │                                                                                          
        assert := assert.New(t)                                                          │          assert := assert.New(t)                                                         
        origin := bgp.NewPathAttributeOrigin(0)                                          │          origin := bgp.NewPathAttributeOrigin(0)                                         
        aspathParam := []bgp.AsPathParamInterface{                                       │          aspathParam := []bgp.AsPathParamInterface{                                      
                                                                                         │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SEQ, []uint16{}),           
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_SET, []uint16{65001, 65002, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SEQ, []uint16{65100, 
                bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100,  │                  bgp.NewAsPathParam(bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET, []uint16{65100, 
        aspath := bgp.NewPathAttributeAsPath(aspathParam)                                │          aspath := bgp.NewPathAttributeAsPath(aspathParam)                               
        nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                           │          nexthop := bgp.NewPathAttributeNextHop("192.168.50.1")                          
                                                                                         │                                                                                          
        pathAttributes := []bgp.PathAttributeInterface{                                  │          pathAttributes := []bgp.PathAttributeInterface{                                 
                origin,                                                                  │                  origin,                                                                 
                aspath,                                                                  │                  aspath,                                                                 
                nexthop,                                                                 │                  nexthop,                                                                
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}               │          nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")}              
        bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                     │          bgpmsg := bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri)                    
        update := bgpmsg.Body.(*bgp.BGPUpdate)                                           │          update := bgpmsg.Body.(*bgp.BGPUpdate)                                          
        UpdatePathAttrs4ByteAs(logger, update)                                           │          UpdatePathAttrs4ByteAs(logger, update)                                          
        peer := PathCreatePeer()                                                         │          peer := PathCreatePeer()                                                        
        p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(),  │          p := NewPath(peer[0], update.NLRI[0], false, update.PathAttributes, time.Now(), 
                                                                                         │                                                                                          
        asn := uint32(65000)                                                             │          asn := uint32(65000)                                                            
        p.PrependAsn(asn, 1, false)                                                      │          p.PrependAsn(asn, 1, false)                                                     
        assert.Equal([]uint32{asn, 0, 0, 0}, p.GetAsSeqList())                           │          assert.Equal([]uint32{asn, 0, 0, 0}, p.GetAsSeqList())                          
}                                                                                        │