mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-11-04 01:51:04 +01:00 
			
		
		
		
	Remove complicated testcase obsoleated by tailNode test
Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com>
This commit is contained in:
		
							parent
							
								
									5bad48a24e
								
							
						
					
					
						commit
						f9f6e1557a
					
				@ -48,7 +48,6 @@ func (hsdb *HSDatabase) ListPeers(machine *types.Machine) (types.Machines, error
 | 
				
			|||||||
		Preload("Routes").
 | 
							Preload("Routes").
 | 
				
			||||||
		Where("node_key <> ?",
 | 
							Where("node_key <> ?",
 | 
				
			||||||
			machine.NodeKey).Find(&machines).Error; err != nil {
 | 
								machine.NodeKey).Find(&machines).Error; err != nil {
 | 
				
			||||||
 | 
					 | 
				
			||||||
		return types.Machines{}, err
 | 
							return types.Machines{}, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -70,7 +69,6 @@ func (hsdb *HSDatabase) ListMachines() ([]types.Machine, error) {
 | 
				
			|||||||
		Preload("User").
 | 
							Preload("User").
 | 
				
			||||||
		Preload("Routes").
 | 
							Preload("Routes").
 | 
				
			||||||
		Find(&machines).Error; err != nil {
 | 
							Find(&machines).Error; err != nil {
 | 
				
			||||||
 | 
					 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -85,7 +83,6 @@ func (hsdb *HSDatabase) ListMachinesByGivenName(givenName string) (types.Machine
 | 
				
			|||||||
		Preload("User").
 | 
							Preload("User").
 | 
				
			||||||
		Preload("Routes").
 | 
							Preload("Routes").
 | 
				
			||||||
		Where("given_name = ?", givenName).Find(&machines).Error; err != nil {
 | 
							Where("given_name = ?", givenName).Find(&machines).Error; err != nil {
 | 
				
			||||||
 | 
					 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -129,34 +126,34 @@ func (hsdb *HSDatabase) GetMachineByGivenName(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GetMachineByID finds a Machine by ID and returns the Machine struct.
 | 
					// GetMachineByID finds a Machine by ID and returns the Machine struct.
 | 
				
			||||||
func (hsdb *HSDatabase) GetMachineByID(id uint64) (*types.Machine, error) {
 | 
					func (hsdb *HSDatabase) GetMachineByID(id uint64) (*types.Machine, error) {
 | 
				
			||||||
	m := types.Machine{}
 | 
						mach := types.Machine{}
 | 
				
			||||||
	if result := hsdb.db.
 | 
						if result := hsdb.db.
 | 
				
			||||||
		Preload("AuthKey").
 | 
							Preload("AuthKey").
 | 
				
			||||||
		Preload("AuthKey.User").
 | 
							Preload("AuthKey.User").
 | 
				
			||||||
		Preload("User").
 | 
							Preload("User").
 | 
				
			||||||
		Preload("Routes").
 | 
							Preload("Routes").
 | 
				
			||||||
		Find(&types.Machine{ID: id}).First(&m); result.Error != nil {
 | 
							Find(&types.Machine{ID: id}).First(&mach); result.Error != nil {
 | 
				
			||||||
		return nil, result.Error
 | 
							return nil, result.Error
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &m, nil
 | 
						return &mach, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetMachineByMachineKey finds a Machine by its MachineKey and returns the Machine struct.
 | 
					// GetMachineByMachineKey finds a Machine by its MachineKey and returns the Machine struct.
 | 
				
			||||||
func (hsdb *HSDatabase) GetMachineByMachineKey(
 | 
					func (hsdb *HSDatabase) GetMachineByMachineKey(
 | 
				
			||||||
	machineKey key.MachinePublic,
 | 
						machineKey key.MachinePublic,
 | 
				
			||||||
) (*types.Machine, error) {
 | 
					) (*types.Machine, error) {
 | 
				
			||||||
	m := types.Machine{}
 | 
						mach := types.Machine{}
 | 
				
			||||||
	if result := hsdb.db.
 | 
						if result := hsdb.db.
 | 
				
			||||||
		Preload("AuthKey").
 | 
							Preload("AuthKey").
 | 
				
			||||||
		Preload("AuthKey.User").
 | 
							Preload("AuthKey.User").
 | 
				
			||||||
		Preload("User").
 | 
							Preload("User").
 | 
				
			||||||
		Preload("Routes").
 | 
							Preload("Routes").
 | 
				
			||||||
		First(&m, "machine_key = ?", util.MachinePublicKeyStripPrefix(machineKey)); result.Error != nil {
 | 
							First(&mach, "machine_key = ?", util.MachinePublicKeyStripPrefix(machineKey)); result.Error != nil {
 | 
				
			||||||
		return nil, result.Error
 | 
							return nil, result.Error
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &m, nil
 | 
						return &mach, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetMachineByNodeKey finds a Machine by its current NodeKey.
 | 
					// GetMachineByNodeKey finds a Machine by its current NodeKey.
 | 
				
			||||||
 | 
				
			|||||||
@ -4,12 +4,10 @@ import (
 | 
				
			|||||||
	"net/netip"
 | 
						"net/netip"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/juanfont/headscale/hscontrol/policy"
 | 
					 | 
				
			||||||
	"github.com/juanfont/headscale/hscontrol/types"
 | 
						"github.com/juanfont/headscale/hscontrol/types"
 | 
				
			||||||
	"github.com/juanfont/headscale/hscontrol/util"
 | 
						"github.com/juanfont/headscale/hscontrol/util"
 | 
				
			||||||
	"gopkg.in/check.v1"
 | 
						"gopkg.in/check.v1"
 | 
				
			||||||
	"tailscale.com/tailcfg"
 | 
						"tailscale.com/tailcfg"
 | 
				
			||||||
	"tailscale.com/types/key"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s *Suite) TestGetRoutes(c *check.C) {
 | 
					func (s *Suite) TestGetRoutes(c *check.C) {
 | 
				
			||||||
@ -365,144 +363,6 @@ func (s *Suite) TestSubnetFailover(c *check.C) {
 | 
				
			|||||||
	c.Assert(channelUpdates, check.Equals, int32(6))
 | 
						c.Assert(channelUpdates, check.Equals, int32(6))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TestAllowedIPRoutes tests that the AllowedIPs are correctly set for a node,
 | 
					 | 
				
			||||||
// including both the primary routes the node is responsible for, and the
 | 
					 | 
				
			||||||
// exit node routes if enabled.
 | 
					 | 
				
			||||||
func (s *Suite) TestAllowedIPRoutes(c *check.C) {
 | 
					 | 
				
			||||||
	user, err := db.CreateUser("test")
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	pak, err := db.CreatePreAuthKey(user.Name, false, false, nil, nil)
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	_, err = db.GetMachine("test", "test_enable_route_machine")
 | 
					 | 
				
			||||||
	c.Assert(err, check.NotNil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	prefix, err := netip.ParsePrefix(
 | 
					 | 
				
			||||||
		"10.0.0.0/24",
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	prefix2, err := netip.ParsePrefix(
 | 
					 | 
				
			||||||
		"150.0.10.0/25",
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	prefixExitNodeV4, err := netip.ParsePrefix(
 | 
					 | 
				
			||||||
		"0.0.0.0/0",
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	prefixExitNodeV6, err := netip.ParsePrefix(
 | 
					 | 
				
			||||||
		"::/0",
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	hostInfo1 := tailcfg.Hostinfo{
 | 
					 | 
				
			||||||
		RoutableIPs: []netip.Prefix{prefix, prefix2, prefixExitNodeV4, prefixExitNodeV6},
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	nodeKey := key.NewNode()
 | 
					 | 
				
			||||||
	discoKey := key.NewDisco()
 | 
					 | 
				
			||||||
	machineKey := key.NewMachine()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	now := time.Now()
 | 
					 | 
				
			||||||
	machine1 := types.Machine{
 | 
					 | 
				
			||||||
		ID:             1,
 | 
					 | 
				
			||||||
		MachineKey:     util.MachinePublicKeyStripPrefix(machineKey.Public()),
 | 
					 | 
				
			||||||
		NodeKey:        util.NodePublicKeyStripPrefix(nodeKey.Public()),
 | 
					 | 
				
			||||||
		DiscoKey:       util.DiscoPublicKeyStripPrefix(discoKey.Public()),
 | 
					 | 
				
			||||||
		Hostname:       "test_enable_route_machine",
 | 
					 | 
				
			||||||
		UserID:         user.ID,
 | 
					 | 
				
			||||||
		RegisterMethod: util.RegisterMethodAuthKey,
 | 
					 | 
				
			||||||
		AuthKeyID:      uint(pak.ID),
 | 
					 | 
				
			||||||
		HostInfo:       types.HostInfo(hostInfo1),
 | 
					 | 
				
			||||||
		LastSeen:       &now,
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	db.db.Save(&machine1)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = db.ProcessMachineRoutes(&machine1)
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = db.enableRoutes(&machine1, prefix.String())
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// We do not enable this one on purpose to test that it is not enabled
 | 
					 | 
				
			||||||
	// err = db.enableRoutes(&machine1, prefix2.String())
 | 
					 | 
				
			||||||
	// c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	routes, err := db.GetMachineRoutes(&machine1)
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
	for _, route := range routes {
 | 
					 | 
				
			||||||
		if route.IsExitRoute() {
 | 
					 | 
				
			||||||
			err = db.EnableRoute(uint64(route.ID))
 | 
					 | 
				
			||||||
			c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			// We only enable one exit route, so we can test that both are enabled
 | 
					 | 
				
			||||||
			break
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = db.HandlePrimarySubnetFailover()
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	enabledRoutes1, err := db.GetEnabledRoutes(&machine1)
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
	c.Assert(len(enabledRoutes1), check.Equals, 3)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	peer, err := db.TailNode(machine1, &policy.ACLPolicy{}, nil)
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	c.Assert(len(peer.AllowedIPs), check.Equals, 3)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	foundExitNodeV4 := false
 | 
					 | 
				
			||||||
	foundExitNodeV6 := false
 | 
					 | 
				
			||||||
	for _, allowedIP := range peer.AllowedIPs {
 | 
					 | 
				
			||||||
		if allowedIP == prefixExitNodeV4 {
 | 
					 | 
				
			||||||
			foundExitNodeV4 = true
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if allowedIP == prefixExitNodeV6 {
 | 
					 | 
				
			||||||
			foundExitNodeV6 = true
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	c.Assert(foundExitNodeV4, check.Equals, true)
 | 
					 | 
				
			||||||
	c.Assert(foundExitNodeV6, check.Equals, true)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Now we disable only one of the exit routes
 | 
					 | 
				
			||||||
	// and we see if both are disabled
 | 
					 | 
				
			||||||
	var exitRouteV4 types.Route
 | 
					 | 
				
			||||||
	for _, route := range routes {
 | 
					 | 
				
			||||||
		if route.IsExitRoute() && netip.Prefix(route.Prefix) == prefixExitNodeV4 {
 | 
					 | 
				
			||||||
			exitRouteV4 = route
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			break
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = db.DisableRoute(uint64(exitRouteV4.ID))
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	enabledRoutes1, err = db.GetEnabledRoutes(&machine1)
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
	c.Assert(len(enabledRoutes1), check.Equals, 1)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// and now we delete only one of the exit routes
 | 
					 | 
				
			||||||
	// and we check if both are deleted
 | 
					 | 
				
			||||||
	routes, err = db.GetMachineRoutes(&machine1)
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
	c.Assert(len(routes), check.Equals, 4)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = db.DeleteRoute(uint64(exitRouteV4.ID))
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	routes, err = db.GetMachineRoutes(&machine1)
 | 
					 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
					 | 
				
			||||||
	c.Assert(len(routes), check.Equals, 2)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	c.Assert(channelUpdates, check.Equals, int32(2))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (s *Suite) TestDeleteRoutes(c *check.C) {
 | 
					func (s *Suite) TestDeleteRoutes(c *check.C) {
 | 
				
			||||||
	user, err := db.CreateUser("test")
 | 
						user, err := db.CreateUser("test")
 | 
				
			||||||
	c.Assert(err, check.IsNil)
 | 
						c.Assert(err, check.IsNil)
 | 
				
			||||||
 | 
				
			|||||||
@ -99,6 +99,12 @@ func TestTailNode(t *testing.T) {
 | 
				
			|||||||
						Enabled:    true,
 | 
											Enabled:    true,
 | 
				
			||||||
						IsPrimary:  true,
 | 
											IsPrimary:  true,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											Prefix:     types.IPPrefix(netip.MustParsePrefix("172.0.0.0/10")),
 | 
				
			||||||
 | 
											Advertised: true,
 | 
				
			||||||
 | 
											Enabled:    false,
 | 
				
			||||||
 | 
											IsPrimary:  true,
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				CreatedAt: created,
 | 
									CreatedAt: created,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user