mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-04 09:49:50 +00:00
Merge pull request #51222 from yujuhong/fake-addr-svc
Automatic merge from submit-queue (batch tested with PRs 51224, 51191, 51158, 50669, 51222) Change the FakeCloudAddressService to store Alpha objects internally The change assumes the compute Alpha object is the superset of the v1 object. By storing the Alpha objects internally in the fake, we can convert them to Beta and v1 to test different functions.
This commit is contained in:
commit
0cf928f681
@ -17,6 +17,7 @@ limitations under the License.
|
|||||||
package gce
|
package gce
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
@ -32,7 +33,7 @@ type FakeCloudAddressService struct {
|
|||||||
reservedAddrs map[string]bool
|
reservedAddrs map[string]bool
|
||||||
// addrsByRegionAndName
|
// addrsByRegionAndName
|
||||||
// Outer key is for region string; inner key is for address name.
|
// Outer key is for region string; inner key is for address name.
|
||||||
addrsByRegionAndName map[string]map[string]*compute.Address
|
addrsByRegionAndName map[string]map[string]*computealpha.Address
|
||||||
}
|
}
|
||||||
|
|
||||||
// FakeCloudAddressService Implements CloudAddressService
|
// FakeCloudAddressService Implements CloudAddressService
|
||||||
@ -41,23 +42,23 @@ var _ CloudAddressService = &FakeCloudAddressService{}
|
|||||||
func NewFakeCloudAddressService() *FakeCloudAddressService {
|
func NewFakeCloudAddressService() *FakeCloudAddressService {
|
||||||
return &FakeCloudAddressService{
|
return &FakeCloudAddressService{
|
||||||
reservedAddrs: make(map[string]bool),
|
reservedAddrs: make(map[string]bool),
|
||||||
addrsByRegionAndName: make(map[string]map[string]*compute.Address),
|
addrsByRegionAndName: make(map[string]map[string]*computealpha.Address),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetRegionalAddresses populates the addresses of the region with the name to
|
// SetRegionalAddresses sets the addresses of ther region. This is used for
|
||||||
// IP map.
|
// setting the test environment.
|
||||||
func (cas *FakeCloudAddressService) SetRegionalAddresses(region string, ipList map[string]string) {
|
func (cas *FakeCloudAddressService) SetRegionalAddresses(region string, addrs []*computealpha.Address) {
|
||||||
// Reset addresses in the region.
|
// Reset addresses in the region.
|
||||||
cas.addrsByRegionAndName[region] = make(map[string]*compute.Address)
|
cas.addrsByRegionAndName[region] = make(map[string]*computealpha.Address)
|
||||||
|
|
||||||
for name, ip := range ipList {
|
for _, addr := range addrs {
|
||||||
cas.reservedAddrs[ip] = true
|
cas.reservedAddrs[addr.Address] = true
|
||||||
cas.addrsByRegionAndName[region][name] = &compute.Address{Name: name, Address: ip}
|
cas.addrsByRegionAndName[region][addr.Name] = addr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cas *FakeCloudAddressService) ReserveRegionAddress(addr *compute.Address, region string) error {
|
func (cas *FakeCloudAddressService) ReserveAlphaRegionAddress(addr *computealpha.Address, region string) error {
|
||||||
if addr.Address == "" {
|
if addr.Address == "" {
|
||||||
addr.Address = fmt.Sprintf("1.2.3.%d", cas.count)
|
addr.Address = fmt.Sprintf("1.2.3.%d", cas.count)
|
||||||
cas.count++
|
cas.count++
|
||||||
@ -68,7 +69,7 @@ func (cas *FakeCloudAddressService) ReserveRegionAddress(addr *compute.Address,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if _, exists := cas.addrsByRegionAndName[region]; !exists {
|
if _, exists := cas.addrsByRegionAndName[region]; !exists {
|
||||||
cas.addrsByRegionAndName[region] = make(map[string]*compute.Address)
|
cas.addrsByRegionAndName[region] = make(map[string]*computealpha.Address)
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, exists := cas.addrsByRegionAndName[region][addr.Name]; exists {
|
if _, exists := cas.addrsByRegionAndName[region][addr.Name]; exists {
|
||||||
@ -80,7 +81,12 @@ func (cas *FakeCloudAddressService) ReserveRegionAddress(addr *compute.Address,
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cas *FakeCloudAddressService) GetRegionAddress(name, region string) (*compute.Address, error) {
|
func (cas *FakeCloudAddressService) ReserveRegionAddress(addr *compute.Address, region string) error {
|
||||||
|
alphaAddr := convertToAlphaAddress(addr)
|
||||||
|
return cas.ReserveAlphaRegionAddress(alphaAddr, region)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cas *FakeCloudAddressService) GetAlphaRegionAddress(name, region string) (*computealpha.Address, error) {
|
||||||
if _, exists := cas.addrsByRegionAndName[region]; !exists {
|
if _, exists := cas.addrsByRegionAndName[region]; !exists {
|
||||||
return nil, makeGoogleAPINotFoundError("")
|
return nil, makeGoogleAPINotFoundError("")
|
||||||
}
|
}
|
||||||
@ -92,6 +98,14 @@ func (cas *FakeCloudAddressService) GetRegionAddress(name, region string) (*comp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cas *FakeCloudAddressService) GetRegionAddress(name, region string) (*compute.Address, error) {
|
||||||
|
addr, err := cas.GetAlphaRegionAddress(name, region)
|
||||||
|
if addr != nil {
|
||||||
|
return convertToV1Address(addr), err
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
func (cas *FakeCloudAddressService) GetRegionAddressByIP(region, ipAddress string) (*compute.Address, error) {
|
func (cas *FakeCloudAddressService) GetRegionAddressByIP(region, ipAddress string) (*compute.Address, error) {
|
||||||
if _, exists := cas.addrsByRegionAndName[region]; !exists {
|
if _, exists := cas.addrsByRegionAndName[region]; !exists {
|
||||||
return nil, makeGoogleAPINotFoundError("")
|
return nil, makeGoogleAPINotFoundError("")
|
||||||
@ -99,16 +113,32 @@ func (cas *FakeCloudAddressService) GetRegionAddressByIP(region, ipAddress strin
|
|||||||
|
|
||||||
for _, addr := range cas.addrsByRegionAndName[region] {
|
for _, addr := range cas.addrsByRegionAndName[region] {
|
||||||
if addr.Address == ipAddress {
|
if addr.Address == ipAddress {
|
||||||
return addr, nil
|
return convertToV1Address(addr), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, makeGoogleAPINotFoundError("")
|
return nil, makeGoogleAPINotFoundError("")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cas *FakeCloudAddressService) GetAlphaRegionAddress(name, region string) (*computealpha.Address, error) {
|
func convertToV1Address(object gceObject) *compute.Address {
|
||||||
return nil, fmt.Errorf("not implemented")
|
enc, err := object.MarshalJSON()
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Sprintf("Failed to encode to json: %v", err))
|
||||||
|
}
|
||||||
|
var addr compute.Address
|
||||||
|
if err := json.Unmarshal(enc, &addr); err != nil {
|
||||||
|
panic(fmt.Sprintf("Failed to convert GCE apiObject %v to v1 address: %v", object, err))
|
||||||
|
}
|
||||||
|
return &addr
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cas *FakeCloudAddressService) ReserveAlphaRegionAddress(addr *computealpha.Address, region string) error {
|
func convertToAlphaAddress(object gceObject) *computealpha.Address {
|
||||||
return fmt.Errorf("not implemented")
|
enc, err := object.MarshalJSON()
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Sprintf("Failed to encode to json: %v", err))
|
||||||
|
}
|
||||||
|
var addr computealpha.Address
|
||||||
|
if err := json.Unmarshal(enc, &addr); err != nil {
|
||||||
|
panic(fmt.Sprintf("Failed to convert GCE apiObject %v to alpha address: %v", object, err))
|
||||||
|
}
|
||||||
|
return &addr
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,8 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
|
computealpha "google.golang.org/api/compute/v0.alpha"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestEnsureStaticIP(t *testing.T) {
|
func TestEnsureStaticIP(t *testing.T) {
|
||||||
@ -51,13 +53,13 @@ func TestVerifyRequestedIP(t *testing.T) {
|
|||||||
for desc, tc := range map[string]struct {
|
for desc, tc := range map[string]struct {
|
||||||
requestedIP string
|
requestedIP string
|
||||||
fwdRuleIP string
|
fwdRuleIP string
|
||||||
ipList map[string]string
|
addrList []*computealpha.Address
|
||||||
expectErr bool
|
expectErr bool
|
||||||
expectUserOwned bool
|
expectUserOwned bool
|
||||||
}{
|
}{
|
||||||
"requested IP exists": {
|
"requested IP exists": {
|
||||||
requestedIP: "1.1.1.1",
|
requestedIP: "1.1.1.1",
|
||||||
ipList: map[string]string{"foo": "1.1.1.1"},
|
addrList: []*computealpha.Address{{Name: "foo", Address: "1.1.1.1"}},
|
||||||
expectErr: false,
|
expectErr: false,
|
||||||
expectUserOwned: true,
|
expectUserOwned: true,
|
||||||
},
|
},
|
||||||
@ -76,7 +78,7 @@ func TestVerifyRequestedIP(t *testing.T) {
|
|||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(desc, func(t *testing.T) {
|
t.Run(desc, func(t *testing.T) {
|
||||||
s.SetRegionalAddresses(region, tc.ipList)
|
s.SetRegionalAddresses(region, tc.addrList)
|
||||||
isUserOwnedIP, err := verifyUserRequestedIP(s, region, tc.requestedIP, tc.fwdRuleIP, lbRef)
|
isUserOwnedIP, err := verifyUserRequestedIP(s, region, tc.requestedIP, tc.fwdRuleIP, lbRef)
|
||||||
assert.Equal(t, tc.expectErr, err != nil, fmt.Sprintf("err: %v", err))
|
assert.Equal(t, tc.expectErr, err != nil, fmt.Sprintf("err: %v", err))
|
||||||
assert.Equal(t, tc.expectUserOwned, isUserOwnedIP, desc)
|
assert.Equal(t, tc.expectUserOwned, isUserOwnedIP, desc)
|
||||||
|
Loading…
Reference in New Issue
Block a user