// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package api
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestAPI_ConfigEntries_HTTPRoute ( t * testing . T ) {
t . Parallel ( )
c , s := makeClient ( t )
defer s . Stop ( )
configEntries := c . ConfigEntries ( )
route1 := & HTTPRouteConfigEntry {
Kind : HTTPRoute ,
Name : "route1" ,
}
route2 := & HTTPRouteConfigEntry {
Kind : HTTPRoute ,
Name : "route2" ,
}
// set it
_ , wm , err := configEntries . Set ( route1 , nil )
require . NoError ( t , err )
require . NotNil ( t , wm )
require . NotEqual ( t , 0 , wm . RequestTime )
// also set the second one
_ , wm , err = configEntries . Set ( route2 , nil )
require . NoError ( t , err )
require . NotNil ( t , wm )
require . NotEqual ( t , 0 , wm . RequestTime )
// get it
entry , qm , err := configEntries . Get ( HTTPRoute , "route1" , nil )
require . NoError ( t , err )
require . NotNil ( t , qm )
require . NotEqual ( t , 0 , qm . RequestTime )
// verify it
readRoute , ok := entry . ( * HTTPRouteConfigEntry )
require . True ( t , ok )
require . Equal ( t , route1 . Kind , readRoute . Kind )
require . Equal ( t , route1 . Name , readRoute . Name )
require . Equal ( t , route1 . Meta , readRoute . Meta )
require . Equal ( t , route1 . Meta , readRoute . GetMeta ( ) )
// update it
route1 . Rules = [ ] HTTPRouteRule {
{
Filters : HTTPFilters {
URLRewrite : & URLRewrite {
Path : "abc" ,
} ,
} ,
} ,
}
// CAS fail
written , _ , err := configEntries . CAS ( route1 , 0 , nil )
require . NoError ( t , err )
require . False ( t , written )
// CAS success
written , wm , err = configEntries . CAS ( route1 , readRoute . ModifyIndex , nil )
require . NoError ( t , err )
require . NotNil ( t , wm )
require . NotEqual ( t , 0 , wm . RequestTime )
require . True ( t , written )
// re-setting should not yield an error
_ , wm , err = configEntries . Set ( route1 , nil )
require . NoError ( t , err )
require . NotNil ( t , wm )
require . NotEqual ( t , 0 , wm . RequestTime )
route2 . Rules = [ ] HTTPRouteRule {
{
Filters : HTTPFilters {
URLRewrite : & URLRewrite {
Path : "def" ,
} ,
} ,
} ,
}
_ , wm , err = configEntries . Set ( route2 , nil )
require . NoError ( t , err )
require . NotNil ( t , wm )
require . NotEqual ( t , 0 , wm . RequestTime )
// list them
entries , qm , err := configEntries . List ( HTTPRoute , nil )
require . NoError ( t , err )
require . NotNil ( t , qm )
require . NotEqual ( t , 0 , qm . RequestTime )
require . Len ( t , entries , 2 )
for _ , entry = range entries {
switch entry . GetName ( ) {
case "route1" :
// this also verifies that the update value was persisted and
// the updated values are seen
readRoute , ok = entry . ( * HTTPRouteConfigEntry )
require . True ( t , ok )
require . Equal ( t , route1 . Kind , readRoute . Kind )
require . Equal ( t , route1 . Name , readRoute . Name )
require . Len ( t , readRoute . Rules , 1 )
require . Equal ( t , route1 . Rules , readRoute . Rules )
case "route2" :
readRoute , ok = entry . ( * HTTPRouteConfigEntry )
require . True ( t , ok )
require . Equal ( t , route2 . Kind , readRoute . Kind )
require . Equal ( t , route2 . Name , readRoute . Name )
require . Len ( t , readRoute . Rules , 1 )
require . Equal ( t , route2 . Rules , readRoute . Rules )
}
}
// delete it
wm , err = configEntries . Delete ( HTTPRoute , "route1" , nil )
require . NoError ( t , err )
require . NotNil ( t , wm )
require . NotEqual ( t , 0 , wm . RequestTime )
// verify deletion
_ , _ , err = configEntries . Get ( HTTPRoute , "route1" , nil )
require . Error ( t , err )
}