Slightly clean up tests, add new amd64 autopkgtest which checks a livefs.
This commit is contained in:
		
							parent
							
								
									6dbafb28d0
								
							
						
					
					
						commit
						85a6d759fd
					
				
							
								
								
									
										6
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							| @ -1,3 +1,9 @@ | |||||||
|  | snapd-extra-utils (1.1.0) UNRELEASED; urgency=medium | ||||||
|  | 
 | ||||||
|  |   * Slightly clean up tests, add new amd64 autopkgtest which checks a livefs. | ||||||
|  | 
 | ||||||
|  |  -- Simon Quigley <tsimonq2@ubuntu.com>  Sun, 16 Feb 2025 13:36:41 -0600 | ||||||
|  | 
 | ||||||
| snapd-extra-utils (1.0.7) plucky; urgency=medium | snapd-extra-utils (1.0.7) plucky; urgency=medium | ||||||
| 
 | 
 | ||||||
|   * Add several extra Breaks/Replaces to be safe. |   * Add several extra Breaks/Replaces to be safe. | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								debian/tests/control
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								debian/tests/control
									
									
									
									
										vendored
									
									
								
							| @ -1,3 +1,3 @@ | |||||||
| Test-Command: snapd-seed-glue/tests/snapd_seed_glue_test | Test-Command: snapd-seed-glue/tests/snapd_seed_glue_test | ||||||
| Depends: snapd-seed-glue, tree | Depends: snapd-seed-glue, tree, livecd-rootfs [amd64] | ||||||
| Restrictions: needs-internet, build-needed | Restrictions: needs-internet, build-needed, isolation-machine, needs-sudo | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| cmake_minimum_required(VERSION 3.14) | cmake_minimum_required(VERSION 3.16) | ||||||
| project(snapd_seed_glue_test) | project(snapd_seed_glue_test) | ||||||
| 
 | 
 | ||||||
| set(CMAKE_CXX_STANDARD 23) | set(CMAKE_CXX_STANDARD 23) | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| // Copyright (C) 2024 Simon Quigley <tsimonq2@ubuntu.com>
 | // Copyright (C) 2024-2025 Simon Quigley <tsimonq2@ubuntu.com>
 | ||||||
| //
 | //
 | ||||||
| // This program is free software; you can redistribute it and/or
 | // This program is free software; you can redistribute it and/or
 | ||||||
| // modify it under the terms of the GNU General Public License
 | // modify it under the terms of the GNU General Public License
 | ||||||
| @ -10,14 +10,21 @@ | |||||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||||||
| // GNU General Public License for more details.
 | // GNU General Public License for more details.
 | ||||||
| 
 | 
 | ||||||
| #include <iostream> |  | ||||||
| #include <string> |  | ||||||
| #include <vector> |  | ||||||
| #include <cstdlib> |  | ||||||
| #include <cstdio> |  | ||||||
| #include <array> | #include <array> | ||||||
|  | #include <cstdio> | ||||||
|  | #include <cstdlib> | ||||||
|  | #include <format> | ||||||
|  | #include <fstream> | ||||||
|  | #include <iostream> | ||||||
| #include <stdexcept> | #include <stdexcept> | ||||||
|  | #include <string> | ||||||
| #include <utility> | #include <utility> | ||||||
|  | #include <vector> | ||||||
|  | 
 | ||||||
|  | #if defined(__x86_64__) || defined(__amd64__) | ||||||
|  | #include <filesystem> | ||||||
|  | #include <unistd.h> | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| std::string OUTPUT_FILE_CONTENTS; | std::string OUTPUT_FILE_CONTENTS; | ||||||
| 
 | 
 | ||||||
| @ -39,28 +46,33 @@ std::pair<std::string, int> execute_command(const std::string& cmd) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void confirm_success() { | void confirm_success() { | ||||||
|     if (OUTPUT_FILE_CONTENTS.find("Cleanup and validation completed") != std::string::npos) { |     if (OUTPUT_FILE_CONTENTS.find("Cleanup and validation completed") != std::string::npos) OUTPUT_FILE_CONTENTS.clear(); | ||||||
|         // Success, clear OUTPUT_FILE_CONTENTS
 |     else exit(1); | ||||||
|         OUTPUT_FILE_CONTENTS.clear(); |  | ||||||
|     } else { |  | ||||||
|         exit(1); |  | ||||||
|     } |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void run_snapd_seed_glue(const std::vector<std::string>& args) { | void run_snapd_seed_glue(const std::vector<std::string>& args, const std::string& dir = "") { | ||||||
|     std::string cmd = "snapd-seed-glue/snapd-seed-glue --verbose --seed hello_test"; |     std::string cmd; | ||||||
|     for (const auto& arg : args) { |     if (!dir.empty()) cmd = std::format("snapd-seed-glue/snapd-seed-glue --verbose --seed {}", dir); | ||||||
|         cmd += " " + arg; |     else cmd = "snapd-seed-glue/snapd-seed-glue --verbose --seed hello_test"; | ||||||
|     } |     for (const auto& arg : args) cmd += " " + arg; | ||||||
|  | 
 | ||||||
|     auto [output, exit_code] = execute_command(cmd); |     auto [output, exit_code] = execute_command(cmd); | ||||||
|     // Append output to OUTPUT_FILE_CONTENTS
 |  | ||||||
|     OUTPUT_FILE_CONTENTS += output; |     OUTPUT_FILE_CONTENTS += output; | ||||||
|     if (exit_code != 0) { |     if (exit_code != 0) exit(exit_code); | ||||||
|         exit(1); |  | ||||||
|     } |  | ||||||
|     confirm_success(); |     confirm_success(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #if defined(__x86_64__) || defined(__amd64__) | ||||||
|  | std::string get_version_codename() { | ||||||
|  |     std::ifstream file("/etc/os-release"); | ||||||
|  |     if (!file.is_open()) return {}; | ||||||
|  |     std::string line; | ||||||
|  |     constexpr std::string_view key = "VERSION_CODENAME="; | ||||||
|  |     while (std::getline(file, line)) if (line.starts_with(key)) return line.substr(key.size()); | ||||||
|  |     return ""; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| int main() { | int main() { | ||||||
|     std::cout << "[snapd-seed-glue autopkgtest] Testing snapd-seed-glue with hello...\n"; |     std::cout << "[snapd-seed-glue autopkgtest] Testing snapd-seed-glue with hello...\n"; | ||||||
|     run_snapd_seed_glue({"hello"}); |     run_snapd_seed_glue({"hello"}); | ||||||
| @ -76,13 +88,38 @@ int main() { | |||||||
|     std::string cmd = "/usr/bin/snapd-seed-glue --verbose --seed test_dir " + invalid_snap; |     std::string cmd = "/usr/bin/snapd-seed-glue --verbose --seed test_dir " + invalid_snap; | ||||||
|     auto [output, exit_code] = execute_command(cmd); |     auto [output, exit_code] = execute_command(cmd); | ||||||
|     OUTPUT_FILE_CONTENTS += output; |     OUTPUT_FILE_CONTENTS += output; | ||||||
|     if (exit_code != 0) { |     if (exit_code != 0) std::cout << "Fail expected\n"; | ||||||
|         std::cout << "Fail expected\n"; |     if (OUTPUT_FILE_CONTENTS.find("cannot install snap \"" + invalid_snap + "\": snap not found") == std::string::npos) exit(1); | ||||||
|     } | 
 | ||||||
|     if (OUTPUT_FILE_CONTENTS.find("cannot install snap \"" + invalid_snap + "\": snap not found") != std::string::npos) { | #if defined(__x86_64__) || defined(__amd64__) | ||||||
|         // Expected error message found
 |     std::cout << "[snapd-seed-glue autopkgtest] Confirm that a livefs can be created, and snapd-seed-glue can be used...\n"; | ||||||
|     } else { |     // Logic taken from lp:launchpad-buildd/lpbuildd/target/build_livefs.py
 | ||||||
|         exit(1); |     setenv("PROJECT", "lubuntu", 1); | ||||||
|  |     setenv("ARCH", "amd64", 1); | ||||||
|  |     setenv("SUITE", get_version_codename().c_str(), 1); | ||||||
|  | 
 | ||||||
|  |     if (!std::filesystem::create_directory("auto")) exit(1); | ||||||
|  |     for (std::string lb_script : {"config", "build", "clean"}) { | ||||||
|  |         auto [link_output, link_exit_code] = execute_command(std::format("ln -s /usr/share/livecd-rootfs/live-build/auto/{} auto/", lb_script)); | ||||||
|  |         if (link_exit_code != 0) exit(link_exit_code); | ||||||
|     } |     } | ||||||
|  |     auto [clean_output, clean_exit_code] = execute_command("sudo -E lb clean --purge"); | ||||||
|  |     if (clean_exit_code != 0) exit(clean_exit_code); | ||||||
|  |     auto [config_output, config_exit_code] = execute_command("lb config"); | ||||||
|  |     if (config_exit_code != 0) exit(config_exit_code); | ||||||
|  |     auto [build_output, build_exit_code] = execute_command("sudo -E lb build"); | ||||||
|  |     if (build_exit_code != 0) exit(build_exit_code); | ||||||
|  |     auto [unsquashfs_output, unsquashfs_exit_code] = execute_command("sudo unsquashfs livecd.lubuntu.minimal.standard.squashfs /var/lib/snapd/seed/"); | ||||||
|  |     if (unsquashfs_exit_code != 0) exit(unsquashfs_exit_code); | ||||||
|  |     auto [clean2_output, clean2_exit_code] = execute_command("sudo -E lb clean --purge"); | ||||||
|  |     if (clean2_exit_code != 0) exit(clean2_exit_code); | ||||||
|  |     auto [chown_output, chown_exit_code] = execute_command(std::format("sudo chown -R {}:{} squashfs-root/", getuid(), getgid())); | ||||||
|  |     if (chown_exit_code != 0) exit(chown_exit_code); | ||||||
|  | 
 | ||||||
|  |     std::cout << "[snapd-seed-glue autopkgtest] A livefs can be created. Confirm snapd-seed-glue can be used...\n"; | ||||||
|  |     run_snapd_seed_glue({"firefox", "firmware-updater"}, "squashfs-root/var/lib/snapd/seed/"); | ||||||
|  |     run_snapd_seed_glue({"firefox", "firmware-updater", "krita", "thunderbird"}, "squashfs-root/var/lib/snapd/seed/"); | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user