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