2015-03-04 16:14:18 +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"
2015-05-05 01:08:49 +03:00
# include "libglnx.h"
2015-03-04 16:14:18 +03:00
# include "ostree-mutable-tree.h"
# include <glib.h>
# include <stdlib.h>
# include <gio/gio.h>
# include <string.h>
# include "ot-unix-utils.h"
static void
test_metadata_checksum ( void )
{
const char * checksum = " 12345678901234567890123456789012 " ;
2015-05-05 17:33:53 +03:00
glnx_unref_object OstreeMutableTree * tree = ostree_mutable_tree_new ( ) ;
2015-03-04 16:14:18 +03:00
g_assert_null ( ostree_mutable_tree_get_metadata_checksum ( tree ) ) ;
ostree_mutable_tree_set_metadata_checksum ( tree , checksum ) ;
g_assert_cmpstr ( checksum , = = , ostree_mutable_tree_get_metadata_checksum ( tree ) ) ;
}
static void
test_mutable_tree_walk ( void )
{
2015-05-05 17:33:53 +03:00
glnx_unref_object OstreeMutableTree * tree = ostree_mutable_tree_new ( ) ;
glnx_unref_object OstreeMutableTree * parent = NULL ;
2015-05-05 18:44:40 +03:00
g_autoptr ( GPtrArray ) split_path = NULL ;
2015-03-04 16:14:18 +03:00
GError * error = NULL ;
const char * pathname = " a/b/c/d/e/f/g/i " ;
const char * checksum = " 01234567890123456789012345678901 " ;
g_assert ( ot_util_path_split_validate ( pathname , & split_path , & error ) ) ;
g_assert ( ostree_mutable_tree_ensure_parent_dirs ( tree , split_path ,
checksum , & parent ,
& error ) ) ;
{
2015-05-05 17:33:53 +03:00
glnx_unref_object OstreeMutableTree * subdir = NULL ;
2015-03-04 16:14:18 +03:00
g_assert ( ostree_mutable_tree_walk ( tree , split_path , 0 , & subdir , & error ) ) ;
g_assert_nonnull ( subdir ) ;
}
{
2015-05-05 17:33:53 +03:00
glnx_unref_object OstreeMutableTree * subdir = NULL ;
2015-03-04 16:14:18 +03:00
g_assert_false ( ostree_mutable_tree_walk ( tree , split_path , 1 , & subdir , & error ) ) ;
g_assert_null ( subdir ) ;
g_clear_error ( & error ) ;
}
{
2015-05-05 17:33:53 +03:00
glnx_unref_object OstreeMutableTree * subdir = NULL ;
glnx_unref_object OstreeMutableTree * a = NULL ;
2015-05-05 00:58:26 +03:00
g_autofree char * source_checksum = NULL ;
2015-03-04 16:14:18 +03:00
ostree_mutable_tree_lookup ( tree , " a " , & source_checksum , & a , & error ) ;
g_assert ( ostree_mutable_tree_walk ( a , split_path , 1 , & subdir , & error ) ) ;
g_assert ( subdir ) ;
}
}
static void
test_ensure_parent_dirs ( void )
{
2015-05-05 17:33:53 +03:00
glnx_unref_object OstreeMutableTree * tree = ostree_mutable_tree_new ( ) ;
glnx_unref_object OstreeMutableTree * parent = NULL ;
2015-05-05 18:44:40 +03:00
g_autoptr ( GPtrArray ) split_path = NULL ;
2015-03-04 16:14:18 +03:00
GError * error = NULL ;
const char * pathname = " /foo/bar/baz " ;
const char * checksum = " 01234567890123456789012345678901 " ;
2015-05-05 00:58:26 +03:00
g_autofree char * source_checksum = NULL ;
2015-05-05 17:33:53 +03:00
glnx_unref_object OstreeMutableTree * source_subdir = NULL ;
2015-05-05 00:58:26 +03:00
g_autofree char * source_checksum2 = NULL ;
2015-05-05 17:33:53 +03:00
glnx_unref_object OstreeMutableTree * source_subdir2 = NULL ;
2015-03-04 16:14:18 +03:00
g_assert ( ot_util_path_split_validate ( pathname , & split_path , & error ) ) ;
g_assert ( ostree_mutable_tree_ensure_parent_dirs ( tree , split_path ,
checksum , & parent ,
& error ) ) ;
g_assert ( ostree_mutable_tree_lookup ( tree , " foo " , & source_checksum ,
& source_subdir , & error ) ) ;
g_assert_false ( ostree_mutable_tree_lookup ( tree , " bar " , & source_checksum2 ,
& source_subdir2 , & error ) ) ;
}
static void
test_ensure_dir ( void )
{
2015-05-05 17:33:53 +03:00
glnx_unref_object OstreeMutableTree * tree = ostree_mutable_tree_new ( ) ;
glnx_unref_object OstreeMutableTree * parent = NULL ;
2015-05-05 18:44:40 +03:00
g_autoptr ( GPtrArray ) split_path = NULL ;
2015-03-04 16:14:18 +03:00
GError * error = NULL ;
const char * dirname = " foo " ;
const char * filename = " bar " ;
const char * checksum = " 01234567890123456789012345678901 " ;
2015-05-05 00:58:26 +03:00
g_autofree char * source_checksum = NULL ;
2015-05-05 17:33:53 +03:00
glnx_unref_object OstreeMutableTree * source_subdir = NULL ;
2015-03-04 16:14:18 +03:00
g_assert ( ostree_mutable_tree_ensure_dir ( tree , dirname , & parent , & error ) ) ;
g_assert ( ostree_mutable_tree_lookup ( tree , dirname , & source_checksum , & source_subdir , & error ) ) ;
g_assert ( ostree_mutable_tree_replace_file ( tree , filename , checksum , & error ) ) ;
g_assert_false ( ostree_mutable_tree_ensure_dir ( tree , filename , & parent , & error ) ) ;
}
static void
test_replace_file ( void )
{
2015-05-05 17:33:53 +03:00
glnx_unref_object OstreeMutableTree * tree = ostree_mutable_tree_new ( ) ;
glnx_unref_object OstreeMutableTree * parent = NULL ;
2015-05-05 18:44:40 +03:00
g_autoptr ( GPtrArray ) split_path = NULL ;
2015-03-04 16:14:18 +03:00
GError * error = NULL ;
const char * filename = " bar " ;
const char * checksum = " 01234567890123456789012345678901 " ;
const char * checksum2 = " ABCDEF01234567890123456789012345 " ;
g_assert ( ostree_mutable_tree_replace_file ( tree , filename , checksum , & error ) ) ;
{
2015-05-05 00:58:26 +03:00
g_autofree char * out_checksum = NULL ;
2015-05-05 17:33:53 +03:00
glnx_unref_object OstreeMutableTree * subdir = NULL ;
2015-03-04 16:14:18 +03:00
g_assert ( ostree_mutable_tree_lookup ( tree , filename , & out_checksum , & subdir , & error ) ) ;
g_assert_cmpstr ( checksum , = = , out_checksum ) ;
}
g_assert ( ostree_mutable_tree_replace_file ( tree , filename , checksum2 , & error ) ) ;
{
2015-05-05 00:58:26 +03:00
g_autofree char * out_checksum = NULL ;
2015-05-05 17:33:53 +03:00
glnx_unref_object OstreeMutableTree * subdir = NULL ;
2015-03-04 16:14:18 +03:00
g_assert ( ostree_mutable_tree_lookup ( tree , filename , & out_checksum , & subdir , & error ) ) ;
g_assert_cmpstr ( checksum2 , = = , out_checksum ) ;
}
}
static void
test_contents_checksum ( void )
{
const char * checksum = " 01234567890123456789012345678901 " ;
const char * subdir_checksum = " ABCD0123456789012345678901234567 " ;
2015-05-05 17:33:53 +03:00
glnx_unref_object OstreeMutableTree * tree = ostree_mutable_tree_new ( ) ;
glnx_unref_object OstreeMutableTree * subdir = NULL ;
2015-03-04 16:14:18 +03:00
GError * error = NULL ;
g_assert_null ( ostree_mutable_tree_get_contents_checksum ( tree ) ) ;
ostree_mutable_tree_set_contents_checksum ( tree , checksum ) ;
g_assert_cmpstr ( checksum , = = , ostree_mutable_tree_get_contents_checksum ( tree ) ) ;
g_assert ( ostree_mutable_tree_ensure_dir ( tree , " subdir " , & subdir , & error ) ) ;
g_assert_nonnull ( subdir ) ;
ostree_mutable_tree_set_contents_checksum ( subdir , subdir_checksum ) ;
g_assert_cmpstr ( subdir_checksum , = = , ostree_mutable_tree_get_contents_checksum ( subdir ) ) ;
g_assert_null ( ostree_mutable_tree_get_contents_checksum ( tree ) ) ;
}
int main ( int argc , char * * argv )
{
g_test_init ( & argc , & argv , NULL ) ;
g_test_add_func ( " /mutable-tree/metadata-checksum " , test_metadata_checksum ) ;
g_test_add_func ( " /mutable-tree/contents-checksum " , test_contents_checksum ) ;
g_test_add_func ( " /mutable-tree/parent-dirs " , test_ensure_parent_dirs ) ;
g_test_add_func ( " /mutable-tree/walk " , test_mutable_tree_walk ) ;
g_test_add_func ( " /mutable-tree/ensure-dir " , test_ensure_dir ) ;
g_test_add_func ( " /mutable-tree/replace-file " , test_replace_file ) ;
return g_test_run ( ) ;
}