public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH pve-network 0/4] SDN tests in sbuild
@ 2023-12-05 13:12 Stefan Lendl
  2023-12-05 13:12 ` [pve-devel] [PATCH pve-network 1/4] refactor(controllers): extract read_etc_network_interfaces Stefan Lendl
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Stefan Lendl @ 2023-12-05 13:12 UTC (permalink / raw)
  To: pve-devel

Extract and mock functions that otherwise access system files which is not
possible in a clean sbuild environment.
Namely /etc/network/interfaces as well as /etc/frr/frr.config.local

Stefan Lendl (4):
  refactor(controllers): extract read_etc_network_interfaces
  refactor(evpn): extract read_local_frr_config
  tests: mocking more functions to avoid system access
  tests: run tests in sbuild

 src/Makefile                                  |  2 +-
 src/PVE/Network/SDN/Controllers.pm            | 16 ++++++---
 src/PVE/Network/SDN/Controllers/EvpnPlugin.pm | 10 ++++--
 src/test/run_test_zones.pl                    | 36 ++++++++++++++++++-
 4 files changed, 55 insertions(+), 9 deletions(-)

-- 
2.42.0





^ permalink raw reply	[flat|nested] 9+ messages in thread

* [pve-devel] [PATCH pve-network 1/4] refactor(controllers): extract read_etc_network_interfaces
  2023-12-05 13:12 [pve-devel] [PATCH pve-network 0/4] SDN tests in sbuild Stefan Lendl
@ 2023-12-05 13:12 ` Stefan Lendl
  2023-12-05 13:12 ` [pve-devel] [PATCH pve-network 2/4] refactor(evpn): extract read_local_frr_config Stefan Lendl
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 9+ messages in thread
From: Stefan Lendl @ 2023-12-05 13:12 UTC (permalink / raw)
  To: pve-devel

Allows mocking local fs access

Signed-off-by: Stefan Lendl <s.lendl@proxmox.com>
---
 src/PVE/Network/SDN/Controllers.pm | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/PVE/Network/SDN/Controllers.pm b/src/PVE/Network/SDN/Controllers.pm
index 167d3ea..fd7ad54 100644
--- a/src/PVE/Network/SDN/Controllers.pm
+++ b/src/PVE/Network/SDN/Controllers.pm
@@ -70,6 +70,16 @@ sub complete_sdn_controller {
     return  $cmdname eq 'add' ? [] : [ PVE::Network::SDN::sdn_controllers_ids($cfg) ];
 }
 
+sub read_etc_network_interfaces {
+    # read main config for physical interfaces
+    my $current_config_file = "/etc/network/interfaces";
+    my $fh = IO::File->new($current_config_file) or die "failed to open $current_config_file - $!\n";
+    my $interfaces_config = PVE::INotify::read_etc_network_interfaces($current_config_file, $fh);
+    $fh->close();
+
+    return $interfaces_config;
+}
+
 sub generate_controller_config {
 
     my $cfg = PVE::Network::SDN::running_config();
@@ -79,11 +89,7 @@ sub generate_controller_config {
 
     return if !$vnet_cfg && !$zone_cfg && !$controller_cfg;
 
-    # read main config for physical interfaces
-    my $current_config_file = "/etc/network/interfaces";
-    my $fh = IO::File->new($current_config_file) or die "failed to open $current_config_file - $!\n";
-    my $interfaces_config = PVE::INotify::read_etc_network_interfaces($current_config_file, $fh);
-    $fh->close();
+    my $interfaces_config = read_etc_network_interfaces();
 
     # check uplinks
     my $uplinks = {};
-- 
2.42.0





^ permalink raw reply	[flat|nested] 9+ messages in thread

* [pve-devel] [PATCH pve-network 2/4] refactor(evpn): extract read_local_frr_config
  2023-12-05 13:12 [pve-devel] [PATCH pve-network 0/4] SDN tests in sbuild Stefan Lendl
  2023-12-05 13:12 ` [pve-devel] [PATCH pve-network 1/4] refactor(controllers): extract read_etc_network_interfaces Stefan Lendl
@ 2023-12-05 13:12 ` Stefan Lendl
  2023-12-05 13:12 ` [pve-devel] [PATCH pve-network 3/4] tests: mocking more functions to avoid access to system files Stefan Lendl
  2023-12-05 13:12 ` [pve-devel] [PATCH pve-network 4/4] tests: run tests in sbuild Stefan Lendl
  3 siblings, 0 replies; 9+ messages in thread
From: Stefan Lendl @ 2023-12-05 13:12 UTC (permalink / raw)
  To: pve-devel

Allows mocking local fs access

Signed-off-by: Stefan Lendl <s.lendl@proxmox.com>
---
 src/PVE/Network/SDN/Controllers/EvpnPlugin.pm | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm b/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm
index f320139..fc297f9 100644
--- a/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm
+++ b/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm
@@ -461,6 +461,12 @@ sub generate_frr_list {
     }
 }
 
+sub read_local_frr_config {
+    if (-e "/etc/frr/frr.conf.local") {
+	return file_get_contents("/etc/frr/frr.conf.local");
+    }
+};
+
 sub generate_controller_rawconfig {
     my ($class, $plugin_config, $config) = @_;
 
@@ -474,8 +480,8 @@ sub generate_controller_rawconfig {
     push @{$final_config}, "service integrated-vtysh-config";
     push @{$final_config}, "!";
 
-    if (-e "/etc/frr/frr.conf.local") {
-	my $local_conf = file_get_contents("/etc/frr/frr.conf.local");
+    my $local_conf = read_local_frr_config();
+    if ($local_conf) {
 	parse_merge_frr_local_config($config, $local_conf);
     }
 
-- 
2.42.0





^ permalink raw reply	[flat|nested] 9+ messages in thread

* [pve-devel] [PATCH pve-network 3/4] tests: mocking more functions to avoid access to system files
  2023-12-05 13:12 [pve-devel] [PATCH pve-network 0/4] SDN tests in sbuild Stefan Lendl
  2023-12-05 13:12 ` [pve-devel] [PATCH pve-network 1/4] refactor(controllers): extract read_etc_network_interfaces Stefan Lendl
  2023-12-05 13:12 ` [pve-devel] [PATCH pve-network 2/4] refactor(evpn): extract read_local_frr_config Stefan Lendl
@ 2023-12-05 13:12 ` Stefan Lendl
  2023-12-05 13:18   ` Lukas Wagner
  2023-12-05 13:12 ` [pve-devel] [PATCH pve-network 4/4] tests: run tests in sbuild Stefan Lendl
  3 siblings, 1 reply; 9+ messages in thread
From: Stefan Lendl @ 2023-12-05 13:12 UTC (permalink / raw)
  To: pve-devel

previously extracted functions are now mocked in the zone tests

mocked PVE::Network::SDN::Controllers::read_etc_network_interfaces and also
INotify::read_etc_network_interfaces to return the same $interfaces_config

created a mock for several PVE::Network::SDN::Controllers::<type>Plugin methods
that would require system access. Just to be sure.

Added a note that mocking INotify::read_file is a HACK and not garanteed to work
if anything other than /etc/network/interfaces is read.

Signed-off-by: Stefan Lendl <s.lendl@proxmox.com>
---
 src/test/run_test_zones.pl | 36 +++++++++++++++++++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)

diff --git a/src/test/run_test_zones.pl b/src/test/run_test_zones.pl
index ce8edc2..2d9be88 100755
--- a/src/test/run_test_zones.pl
+++ b/src/test/run_test_zones.pl
@@ -14,6 +14,10 @@ use PVE::Network::SDN::Zones;
 use PVE::Network::SDN::Controllers;
 use PVE::INotify;
 
+use Data::Dumper qw(Dumper);
+$Data::Dumper::Sortkeys = 1;
+$Data::Dumper::Indent = 1;
+
 sub read_sdn_config {
     my ($file) = @_;
 
@@ -29,7 +33,6 @@ sub read_sdn_config {
     return $sdn_config;
 }
 
-
 my @tests = grep { -d } glob './zones/*/*';
 
 foreach my $test (@tests) {
@@ -47,8 +50,20 @@ foreach my $test (@tests) {
 	    return 'localhost';
 	},
 	read_file => sub {
+	    # HACK this assumes we are always calling PVE::INotify::read_file('interfaces');
 	    return $interfaces_config;
 	},
+	read_etc_network_interfaces => sub {
+	    return $interfaces_config;
+	},
+    );
+
+    my $mocked_pve_sdn_controllers;
+    $mocked_pve_sdn_controllers = Test::MockModule->new('PVE::Network::SDN::Controllers');
+    $mocked_pve_sdn_controllers->mock(
+	read_etc_network_interfaces => sub {
+	    return $interfaces_config;
+	}
     );
 
     my $pve_sdn_subnets;
@@ -88,6 +103,25 @@ foreach my $test (@tests) {
 	},
     );
 
+    my ($first_plugin) = %{$sdn_config->{controllers}->{ids}} if defined $sdn_config->{controllers};
+    if ($first_plugin) {
+	my $controller_plugin = PVE::Network::SDN::Controllers::Plugin->lookup(
+	    $sdn_config->{controllers}->{ids}->{$first_plugin}->{type}
+	);
+	my $mocked_controller_plugin = Test::MockModule->new($controller_plugin);
+	$mocked_controller_plugin->mock(
+	    write_controller_config => sub {
+		return;
+	    },
+	    reload_controller => sub {
+		return;
+	    },
+	    read_local_frr_config => sub {
+		return;
+	    },
+	);
+    }
+
     my $name = $test;
     my $expected = read_file("./$test/expected_sdn_interfaces");
 
-- 
2.42.0





^ permalink raw reply	[flat|nested] 9+ messages in thread

* [pve-devel] [PATCH  pve-network 4/4] tests: run tests in sbuild
  2023-12-05 13:12 [pve-devel] [PATCH pve-network 0/4] SDN tests in sbuild Stefan Lendl
                   ` (2 preceding siblings ...)
  2023-12-05 13:12 ` [pve-devel] [PATCH pve-network 3/4] tests: mocking more functions to avoid access to system files Stefan Lendl
@ 2023-12-05 13:12 ` Stefan Lendl
  3 siblings, 0 replies; 9+ messages in thread
From: Stefan Lendl @ 2023-12-05 13:12 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Stefan Lendl <s.lendl@proxmox.com>
---
 src/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/Makefile b/src/Makefile
index c9dee4c..c4056b4 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -10,7 +10,7 @@ clean:
 
 .PHONY: test
 test:
-	[ -e /run/lock/sbuild ] || $(MAKE) -C $@
+	$(MAKE) -C $@
 
 .PHONY: install
 install:
-- 
2.42.0





^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [pve-devel] [PATCH pve-network 3/4] tests: mocking more functions to avoid access to system files
  2023-12-05 13:12 ` [pve-devel] [PATCH pve-network 3/4] tests: mocking more functions to avoid access to system files Stefan Lendl
@ 2023-12-05 13:18   ` Lukas Wagner
  2023-12-05 14:55     ` Stefan Lendl
  0 siblings, 1 reply; 9+ messages in thread
From: Lukas Wagner @ 2023-12-05 13:18 UTC (permalink / raw)
  To: Proxmox VE development discussion, Stefan Lendl

On 12/5/23 14:12, Stefan Lendl wrote:
> diff --git a/src/test/run_test_zones.pl b/src/test/run_test_zones.pl
> index ce8edc2..2d9be88 100755/
> --- a/src/test/run_test_zones.pl
> +++ b/src/test/run_test_zones.pl
> @@ -14,6 +14,10 @@ use PVE::Network::SDN::Zones;
>   use PVE::Network::SDN::Controllers;
>   use PVE::INotify;
>   
> +use Data::Dumper qw(Dumper);
> +$Data::Dumper::Sortkeys = 1;
> +$Data::Dumper::Indent = 1;
> +

Left-over debug code? :)

-- 
- Lukas




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [pve-devel] [PATCH pve-network 3/4] tests: mocking more functions to avoid access to system files
  2023-12-05 13:18   ` Lukas Wagner
@ 2023-12-05 14:55     ` Stefan Lendl
  0 siblings, 0 replies; 9+ messages in thread
From: Stefan Lendl @ 2023-12-05 14:55 UTC (permalink / raw)
  To: Lukas Wagner, Proxmox VE development discussion

Lukas Wagner <l.wagner@proxmox.com> writes:

>
> Left-over debug code? :)

Yes, I am not actually using this here.
This is also included in the other tests.




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [pve-devel] [PATCH pve-network 4/4] tests: run tests in sbuild
  2023-12-05 12:59 Stefan Lendl
@ 2024-03-07 15:14 ` Stefan Lendl
  0 siblings, 0 replies; 9+ messages in thread
From: Stefan Lendl @ 2024-03-07 15:14 UTC (permalink / raw)
  To: pve-devel


rebased and sent v2




^ permalink raw reply	[flat|nested] 9+ messages in thread

* [pve-devel] [PATCH  pve-network 4/4] tests: run tests in sbuild
@ 2023-12-05 12:59 Stefan Lendl
  2024-03-07 15:14 ` Stefan Lendl
  0 siblings, 1 reply; 9+ messages in thread
From: Stefan Lendl @ 2023-12-05 12:59 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Stefan Lendl <s.lendl@proxmox.com>
---
 src/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/Makefile b/src/Makefile
index c9dee4c..c4056b4 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -10,7 +10,7 @@ clean:
 
 .PHONY: test
 test:
-	[ -e /run/lock/sbuild ] || $(MAKE) -C $@
+	$(MAKE) -C $@
 
 .PHONY: install
 install:
-- 
2.42.0





^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-03-07 15:14 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-05 13:12 [pve-devel] [PATCH pve-network 0/4] SDN tests in sbuild Stefan Lendl
2023-12-05 13:12 ` [pve-devel] [PATCH pve-network 1/4] refactor(controllers): extract read_etc_network_interfaces Stefan Lendl
2023-12-05 13:12 ` [pve-devel] [PATCH pve-network 2/4] refactor(evpn): extract read_local_frr_config Stefan Lendl
2023-12-05 13:12 ` [pve-devel] [PATCH pve-network 3/4] tests: mocking more functions to avoid access to system files Stefan Lendl
2023-12-05 13:18   ` Lukas Wagner
2023-12-05 14:55     ` Stefan Lendl
2023-12-05 13:12 ` [pve-devel] [PATCH pve-network 4/4] tests: run tests in sbuild Stefan Lendl
  -- strict thread matches above, loose matches on Subject: below --
2023-12-05 12:59 Stefan Lendl
2024-03-07 15:14 ` Stefan Lendl

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal