2016-03-02 18:05:08 +03:00
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
*
* Copyright ( C ) 2015 Red Hat , Inc .
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation ; either
* version 2 of the License , or ( at your option ) any later version .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library ; if not , write to the
* Free Software Foundation , Inc . , 59 Temple Place - Suite 330 ,
* Boston , MA 02111 - 1307 , USA .
*/
# include "config.h"
# include <stdlib.h>
# include <string.h>
2017-03-24 17:35:59 +03:00
# include <linux/magic.h>
# include <sys/vfs.h>
2016-03-02 18:05:08 +03:00
# include "libglnx.h"
# include "libostreetest.h"
/* This function hovers in a quantum superposition of horrifying and
* beautiful . Future generations may interpret it as modern art .
*/
2016-06-06 21:49:11 +03:00
gboolean
ot_test_run_libtest ( const char * cmd , GError * * error )
2016-03-02 18:05:08 +03:00
{
gboolean ret = FALSE ;
2016-06-12 16:21:19 +03:00
const char * srcdir = g_getenv ( " G_TEST_SRCDIR " ) ;
2016-03-02 18:05:08 +03:00
int estatus ;
g_autoptr ( GPtrArray ) argv = g_ptr_array_new ( ) ;
g_autoptr ( GString ) cmdstr = g_string_new ( " " ) ;
g_ptr_array_add ( argv , " bash " ) ;
g_ptr_array_add ( argv , " -c " ) ;
2016-06-06 22:00:13 +03:00
g_string_append ( cmdstr , " set -xeuo pipefail; . " ) ;
2016-06-12 16:21:19 +03:00
g_string_append ( cmdstr , srcdir ) ;
2016-03-02 18:05:08 +03:00
g_string_append ( cmdstr , " /tests/libtest.sh; " ) ;
g_string_append ( cmdstr , cmd ) ;
g_ptr_array_add ( argv , cmdstr - > str ) ;
g_ptr_array_add ( argv , NULL ) ;
if ( ! g_spawn_sync ( NULL , ( char * * ) argv - > pdata , NULL , G_SPAWN_SEARCH_PATH ,
NULL , NULL , NULL , NULL , & estatus , error ) )
goto out ;
if ( ! g_spawn_check_exit_status ( estatus , error ) )
goto out ;
ret = TRUE ;
out :
return ret ;
}
2016-03-03 21:49:54 +03:00
OstreeRepo *
ot_test_setup_repo ( GCancellable * cancellable ,
2016-03-02 18:05:08 +03:00
GError * * error )
{
gboolean ret = FALSE ;
g_autoptr ( GFile ) repo_path = g_file_new_for_path ( " repo " ) ;
2016-03-03 21:49:54 +03:00
glnx_unref_object OstreeRepo * ret_repo = NULL ;
2016-03-02 18:05:08 +03:00
2016-06-06 21:49:11 +03:00
if ( ! ot_test_run_libtest ( " setup_test_repository archive-z2 " , error ) )
2016-03-02 18:05:08 +03:00
goto out ;
2016-03-03 21:49:54 +03:00
ret_repo = ostree_repo_new ( repo_path ) ;
2016-03-02 18:05:08 +03:00
2016-03-03 21:49:54 +03:00
if ( ! ostree_repo_open ( ret_repo , cancellable , error ) )
2016-03-02 18:05:08 +03:00
goto out ;
ret = TRUE ;
out :
2016-03-03 21:49:54 +03:00
if ( ret )
return g_steal_pointer ( & ret_repo ) ;
return NULL ;
}
OstreeSysroot *
ot_test_setup_sysroot ( GCancellable * cancellable ,
GError * * error )
{
gboolean ret = FALSE ;
g_autoptr ( GFile ) sysroot_path = g_file_new_for_path ( " sysroot " ) ;
glnx_unref_object OstreeSysroot * ret_sysroot = NULL ;
2017-03-24 17:35:59 +03:00
struct statfs stbuf ;
2016-03-03 21:49:54 +03:00
2016-06-06 21:49:11 +03:00
if ( ! ot_test_run_libtest ( " setup_os_repository \" archive-z2 \" \" syslinux \" " , error ) )
2016-03-03 21:49:54 +03:00
goto out ;
2017-03-24 17:35:59 +03:00
{ g_autoptr ( GString ) buf = g_string_new ( " mutable-deployments " ) ;
if ( statfs ( " / " , & stbuf ) < 0 )
2017-05-12 21:17:21 +03:00
return glnx_null_throw_errno ( error ) ;
2017-03-24 17:35:59 +03:00
/* Keep this in sync with the overlayfs bits in libtest.sh */
# ifndef OVERLAYFS_SUPER_MAGIC
# define OVERLAYFS_SUPER_MAGIC 0x794c7630
# endif
if ( stbuf . f_type = = OVERLAYFS_SUPER_MAGIC )
{
g_print ( " libostreetest: detected overlayfs \n " ) ;
g_string_append ( buf , " ,no-xattrs " ) ;
}
/* Make sure deployments are mutable */
g_setenv ( " OSTREE_SYSROOT_DEBUG " , buf - > str , TRUE ) ;
}
2016-05-13 20:22:02 +03:00
2016-03-03 21:49:54 +03:00
ret_sysroot = ostree_sysroot_new ( sysroot_path ) ;
ret = TRUE ;
out :
if ( ret )
return g_steal_pointer ( & ret_sysroot ) ;
return NULL ;
2016-03-02 18:05:08 +03:00
}