### Copyright (c) 2016-2018 by cisco Systems, Inc. 
### All rights reserved.
### test to verify prefix insert  
test:1 

prefix_insert:4.0.0.0/6 leaf:3 
verify_leaf_result: is_real_prefix,1,leaf_index,3,is_expanded_prefix,0
prefix_del:4.0.0.0/6 leaf:3

# test to verify prefix expansion - expansion to /24 entry at the stride
# boundary 
test:2 

prefix_expand_insert:1.1.2.0/23 to /24 leaf:23
verify_oper_list:1 oper,1,key,2,len,8,index,23,offset,2
verify_oper_list:2 oper,1,key,3,len,8,index,23,offset,2
verify_oper_list_end

# test to delete the expanded prefix
test:3

prefix_del:1.1.2.0/23 leaf:23
verify_oper_list:1 oper,2,key,2,len,8,index,23,offset,2
verify_oper_list:2 oper,2,key,3,len,8,index,23,offset,2
verify_oper_list_end

# test to verify prefix expansion - expansion to /24 entry at the stride
# boundary 
test:4 

prefix_expand_insert:1.1.4.0/22 to /24 leaf:22
verify_oper_list:1 oper,1,key,4,len,8,index,22,offset,2
verify_oper_list:2 oper,1,key,5,len,8,index,22,offset,2
verify_oper_list:3 oper,1,key,6,len,8,index,22,offset,2
verify_oper_list:4 oper,1,key,7,len,8,index,22,offset,2
verify_oper_list_end

# test to delete the expanded prefix
test:5

prefix_del:1.1.4.0/22 leaf:22
verify_oper_list:1 oper,2,key,4,len,8,index,22,offset,2
verify_oper_list:2 oper,2,key,5,len,8,index,22,offset,2
verify_oper_list:3 oper,2,key,6,len,8,index,22,offset,2
verify_oper_list:4 oper,2,key,7,len,8,index,22,offset,2
verify_oper_list_end


# test to verify prefix expansion - expansion /19 to /20 
# entry in the middle of the stride 
test:6 

prefix_expand_insert:1.1.224.0/19 to /20 leaf:19
verify_oper_list:1 oper,1,key,224,len,4,index,19,offset,2
verify_oper_list:2 oper,1,key,240,len,4,index,19,offset,2
verify_oper_list_end

# test to delete the expanded prefix /19
test:7

prefix_del:1.1.224.0/19 leaf:19
verify_oper_list:1 oper,2,key,224,len,4,index,19,offset,2
verify_oper_list:2 oper,2,key,240,len,4,index,19,offset,2
verify_oper_list_end

# test to add expanded prefix then insert the prefix that this covering the 
# expanded prefix. 
# 1. insert /19 . it expands to two entries. 
# 2. insert /20 entry. this will be update to hrardware with leaf_index
# 3. delete the /19 expanded prefix . it will delete only the root and one of the non 
#    covering prefix. 
# 4. delete the covering prefix /20

test:8 

prefix_expand_insert:1.1.224.0/19 to /20 leaf:19
verify_oper_list:1 oper,1,key,224,len,4,index,19,offset,2
verify_oper_list:2 oper,1,key,240,len,4,index,19,offset,2
verify_oper_list_end

prefix_insert:1.1.240.0/20 leaf:30
# leaf result will have is_expanded_prefix set to know that is part of the
# expanded prefix
verify_leaf_result: is_real_prefix,1,leaf_index,30,is_expanded_prefix,1
verify_oper_list:1 oper,0,key,240,len,4,index,30,offset,2
verify_oper_list_end

## delete the expanded prefix
prefix_del:1.1.224.0/19 leaf:19
verify_oper_list:1 oper,2,key,224,len,4,index,19,offset,2
verify_oper_list_end

## delete the covering prefix
prefix_del:1.1.240.0/20 leaf:30
verify_oper_list:1 oper,2,key,240,len,4,index,30,offset,2
verify_oper_list_end


# test to add expanded prefix then insert the prefix that this covering the 
# expanded prefix. 
# 1. insert /19 . it expands to two entries. 
# 2. insert /20 entry. this will be update to hrardware with leaf_index
# 3. delete the /19 expanded prefix . it will delete only the root and one of the non 
#    covering prefix. 
# 4. delete the covering prefix /20

test:9 

prefix_expand_insert:1.1.224.0/19 to /20 leaf:19
verify_oper_list:1 oper,1,key,224,len,4,index,19,offset,2
verify_oper_list:2 oper,1,key,240,len,4,index,19,offset,2
verify_oper_list_end

prefix_insert:1.1.240.0/20 leaf:30
# leaf result will have is_expanded_prefix set to know that is part of the
# expanded prefix
verify_leaf_result: is_real_prefix,1,leaf_index,30,is_expanded_prefix,1
verify_oper_list:1 oper,0,key,240,len,4,index,30,offset,2
verify_oper_list_end

## delete the covering prefix
prefix_del:1.1.240.0/20 leaf:30
## as there was prefix expansion entry /20 covering is replaced with 
## expansion entry from /19
verify_oper_list:1 oper,0,key,240,len,4,index,19,offset,2
verify_oper_list_end

##delete the expanded prefix
prefix_del:1.1.224.0/19 leaf:19
verify_oper_list:1 oper,2,key,224,len,4,index,19,offset,2
verify_oper_list:2 oper,2,key,240,len,4,index,19,offset,2
verify_oper_list_end


#prefix_insert:6.0.0.0/7 leaf:4 
#expected_result,1,oper,0,key,6,len,7
#prefix_insert:6.0.0.0/7 leaf:4
#prefix_del:4.0.0.0/6 leaf:3


# test to add expanded prefix then insert the prefix that this covering the 
# expanded prefix. similar to test #8 - check the stride boundary 
# 1. insert /23 . it expands to two entries. 
# 2. insert /24 entry. this will be update to hrardware with leaf_index
# 3. delete the /23 expanded prefix . it will delete only the root and one of the non 
#    covering prefix. 
# 4. delete the covering prefix /24

test:10 

prefix_expand_insert:1.1.2.0/23 to /24 leaf:19
verify_oper_list:1 oper,1,key,2,len,8,index,19,offset,2
verify_oper_list:2 oper,1,key,3,len,8,index,19,offset,2
verify_oper_list_end

prefix_insert:1.1.3.0/24 leaf:30
# leaf result will have is_expanded_prefix set to know that is part of the
# expanded prefix
verify_leaf_result: is_real_prefix,1,leaf_index,30,is_expanded_prefix,1
verify_oper_list:1 oper,0,key,3,len,4,index,30,offset,2
verify_oper_list_end

## delete the covering prefix
prefix_del:1.1.3.0/24 leaf:30
## as there was prefix expansion entry /24 covering is replaced with 
## expansion entry from /23
verify_oper_list:1 oper,0,key,3,len,8,index,19,offset,2
verify_oper_list_end

##delete the expanded prefix
prefix_del:1.1.2.0/23 leaf:19
verify_oper_list:1 oper,2,key,2,len,8,index,19,offset,2
verify_oper_list:2 oper,2,key,3,len,8,index,19,offset,2
verify_oper_list_end



## insert prefix /6 
## insert prefix /8 with parent collect upto /6
#test:11

prefix_insert:4.0.0.0/6 leaf:3 
verify_leaf_result: is_real_prefix,1,leaf_index,3,is_expanded_prefix,0

prefix_insert_collect_parent:6.0.0.0/8 collect_parent_len:6 leaf:6 


#
#
#insert a common prefix length
prefix_insert:192.168.192.0/18 leaf:2
prefix_insert:192.168.208.0/20 leaf:3
address:192.168.193.1
address:192.168.208.1

#test prefix delete
#prefix_del:192.168.192.0/18 leaf:2
prefix_del:192.168.208.0/20 leaf:3
address:192.168.193.1
address:192.168.208.1

#insert a prefix with length multiple of strides
prefix_insert:192.168.2.0/24 leaf:4
address:192.168.2.1

#insert a prefix with a skip note
prefix_insert:190.0.0.0/24 leaf:5
address:190.0.0.5

# insert a IPv6 prefix
ipv6_prefix_insert:ffff:222:333:444::/64 leaf:6
ipv6_address:ffff:222:333:444::5

# July 25,2014
####################################################################
#Insert IPv4 prefix length multiple of strides.
####################################################################
prefix_insert:192.0.0.0/8 leaf:1
address:192.168.1.1

prefix_insert:192.168.0.0/16 leaf:2
address:192.168.1.1

prefix_insert:192.168.1.0/24 leaf:3
address:192.168.1.1

prefix_insert:192.168.1.1/32 leaf:4
address:192.168.1.1

####################################################################
#Insert IPv4 prefix length with odd prefix length
####################################################################
prefix_insert:192.0.0.0/3 leaf:5
address:192.224.64.1

prefix_insert:64.0.0.0/3 leaf:6
address:64.224.64.1

prefix_insert:192.224.0.0/11 leaf:7
address:192.224.64.1

prefix_insert:65.224.0.0/11 leaf:8
address:65.224.64.1

prefix_insert:192.224.64.0/19 leaf:9
address:192.224.64.1

prefix_insert:64.224.64.0/19 leaf:10
address:64.224.64.1

prefix_insert:192.224.64.0/27 leaf:11
address:192.224.64.1

prefix_insert:64.224.64.0/27 leaf:12
address:64.224.64.1

####################################################################
#Insert/delete a more specific prefix then existing one in one mnode
####################################################################
prefix_insert:64.224.64.0/27 leaf:13
address:64.224.64.1

prefix_insert:64.224.64.0/29 leaf:14
address:64.224.64.1

prefix_del:64.224.64.0/29 leaf:14
address:64.224.64.1

####################################################################
#Updating existing prefix
####################################################################
prefix_insert:64.224.64.0/27 leaf:15
address:64.224.64.1

prefix_insert:64.224.64.0/27 leaf:16
address:64.224.64.1

####################################################################
#Insert/delete a more specific prefix with new mnode.
####################################################################
prefix_insert:64.224.64.0/18 leaf:17
address:64.224.64.1

prefix_insert:64.224.64.0/29 leaf:18
address:64.224.64.1

prefix_del:64.224.64.0/29 leaf:18
address:64.224.64.1

####################################################################
# Create/remove skip node
####################################################################
prefix_insert:66.0.0.0/8 leaf:19
address:66.0.0.1

prefix_insert:66.0.0.8/29 leaf:20
address:66.0.0.1

prefix_insert:66.0.0.0/24 leaf:21
address:66.0.0.1

prefix_insert:66.0.0.0/16 leaf:22
address:66.0.0.1

# prefix_del:66.0.0.8/29 leaf:18 
# address:66.0.0.1

prefix_insert:67.1.0.0/8 leaf:23
address:67.1.1.1

prefix_insert:67.1.1.0/29 leaf:24
address:67.1.1.1

prefix_insert:67.1.1.0/24 leaf:25
address:67.1.1.1

prefix_insert:67.1.1.0/16 leaf:26
address:67.1.1.1

prefix_del:67.1.1.0/16 leaf:26
address:67.1.1.1

prefix_del:67.1.1.0/24 leaf:25
address:67.1.1.1

prefix_del:67.1.1.0/29 leaf:24
address:67.1.1.1

prefix_del:67.1.0.0/8 leaf:23
address:67.1.1.1

prefix_insert:0.0.0.0/0 leaf:27
address:67.1.1.1

####################################################################
 Insert IPv6 prefix length multiple of strides.
####################################################################
ipv6_prefix_insert:ff00::/8 leaf:28
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff::/16 leaf:29
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:0200::/24 leaf:30
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222::/32 leaf:31
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:0300::/40 leaf:32
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333::/48 leaf:33
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:0400::/56 leaf:34
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444::/64 leaf:35
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5500::/72 leaf:36
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5555::/80 leaf:37
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5555:6600::/88 leaf:38
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5555:6666::/96 leaf:39
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5555:6666:7700::/104 leaf:40
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5555:6666:7777::/112 leaf:41
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5555:6666:7777::/120 leaf:42
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5555:6666:7777:5/128 leaf:43
ipv6_address:ffff:222:333:444:5555:6666:7777:5

####################################################################
 Insert IPv6 prefix with old prefix length
####################################################################
ipv6_prefix_insert:e000::/3 leaf:28
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:fff8::/13 leaf:29
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:0222::/23 leaf:30
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222::/31 leaf:31
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:0300::/39 leaf:32
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:332::/47 leaf:33
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:0400::/55 leaf:34
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444::/63 leaf:35
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5500::/71 leaf:36
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5554::/79 leaf:37
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5555:6600::/87 leaf:38
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5555:6666::/95 leaf:39
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5555:6666:7700::/103 leaf:40
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5555:6666:7776::/111 leaf:41
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5555:6666:7777::/119 leaf:42
ipv6_address:ffff:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:ffff:222:333:444:5555:6666:7777:4/127 leaf:43
ipv6_address:ffff:222:333:444:5555:6666:7777:5

#####################################################################
# Insert/delete a more specific prefix then existing one in one mnode
#####################################################################

ipv6_prefix_insert:fffe:222:333:444:5555:6666:7777:4/126 leaf:44
ipv6_address:fffe:222:333:444:5555:6666:7777:5

ipv6_prefix_insert:fffe:222:333:444:5555:6666:7777:4/127 leaf:45
ipv6_address:fffe:222:333:444:5555:6666:7777:5

ipv6_prefix_del:fffe:222:333:444:5555:6666:7777:4/127 leaf:45
ipv6_address:fffe:222:333:444:5555:6666:7777:5

#####################################################################
# Insert/delete a more specific prefix with new mnode.
#####################################################################

ipv6_prefix_insert:fffd:222:333:444:5555:6666:7770::/118 leaf:46
ipv6_address:fffd:222:333:444:5555:6666:7770:5

ipv6_prefix_insert:fffd:222:333:444:5555:6666:7770:4/127 leaf:47
ipv6_address:fffd:222:333:444:5555:6666:7770:5

ipv6_prefix_del:fffd:222:333:444:5555:6666:7770:4/127 leaf:46
ipv6_address:fffd:222:333:444:5555:6666:7770:5

ipv6_prefix_insert:fffc::/8 leaf:48
ipv6_address:fffc::5

ipv6_prefix_insert:fffc::4/127 leaf:49
ipv6_address:fffc::5

ipv6_prefix_del:fffc::4/127 leaf:49
ipv6_address:fffc::5

ipv6_prefix_insert:fffc::4/127 leaf:49
ipv6_address:fffc::5
# this address hit a skip branch, but fails the lookup since the key value in
# the middle isn't 0.
ipv6_address:fffc::5:5

#ipv6_prefix_insert:fffc::4:0:0/120 leaf:50
#ipv6_address:fffc::4:0:ff
##ipv6_address:fffc::5
#ipv6_address:fffc::5:5

# TODO:  Leaf 50 and 51 have an eror
# 'mtrie_nodeid_mgr_get_by_index: null node being retrieved from bitmap tree'
#ipv6_prefix_insert:fffc::/64 leaf:51
#ipv6_address:fffc::4:0:ff
#ipv6_address:fffc::5
#ipv6_address:fffc::5:5
#ipv6_address:fffc::6:0:0:0

#####################################################################
# Insert/delete a more specific prefix with new mnode.
#####################################################################
#ipv6_prefix_del:fffc::4:0:0/120 leaf:50

#ipv6_prefix_del:fffc::/64 leaf:51
#ipv6_address:fffc::4:0:ff
#ipv6_address:fffc::5
#ipv6_address:fffc::5:5
#ipv6_address:fffc::6:0:0:0

ipv6_prefix_del:fffc::4/127 leaf:49
ipv6_address:fffc::4:0:ff
ipv6_address:fffc::5
ipv6_address:fffc::5:5
ipv6_address:fffc::6:0:0:0

#####################################################################
# Insert/delete a more specific prefix with new mnode, no skip node
#####################################################################
ipv6_prefix_insert:fffc:0101:0202:0303:0404:0505:0606:0707/128 leaf:52
ipv6_address:fffc:0101:0202:0303:0404:0505:0606:0707

### test to verify prefix insert  
prefix_insert:4.0.0.0/6 leaf:3 
verify_leaf_result: is_real_prefix,1,leaf_index,3,is_expanded_prefix,0
prefix_del:4.0.0.0/6 leaf:3



## test case node changes from mtrie (internal/search) to skip node
prefix_insert:10.0.0.0/16 leaf:3 
verify_leaf_result: is_real_prefix,1,leaf_index,3,is_expanded_prefix,0

prefix_insert:10.0.1.0/32 leaf:3 
verify_leaf_result: is_real_prefix,1,leaf_index,3,is_expanded_prefix,0

# this prefix delete will convert the prefix to skip node
prefix_del:10.0.0.0/16 leaf:3
prefix_del:10.0.1.0/32 leaf:3




