diff --git a/.gitignore b/.gitignore index e69de29..f2eadcb 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,2 @@ +/libconfig-1.7.2.pdf +/libconfig-1.7.2.tar.gz diff --git a/generate-pdf.sh b/generate-pdf.sh new file mode 100755 index 0000000..38df6b7 --- /dev/null +++ b/generate-pdf.sh @@ -0,0 +1,30 @@ +#! /bin/sh + +# This script builds the PDF version of the libconfig documentation. +# Inspired by the PostgreSQL package. + +set -e + +# Pass package version and name optionally as argument +VERSION=$1 +PKGNAME=${2-libconfig} + +test -z "$VERSION" && VERSION=`awk '/^Version:/ { print $2; }' "$PKGNAME".spec` + +TARGETFILE=`readlink -f "$PKGNAME-$VERSION.pdf"` +test -f "$TARGETFILE" && echo "$TARGETFILE exists" && exit 1 + +echo Building $TARGETFILE ... + +tar xf "$PKGNAME"-$VERSION.tar.* +cd "$PKGNAME"-$VERSION + +# Apply any patches that affect the PDF documentation +# patch -p1 < ../xxx.patch + +# Build the PDF docs +./configure >/dev/null +make pdf +mv -f doc/libconfig.pdf "$TARGETFILE" + +exit 0 diff --git a/libconfig.spec b/libconfig.spec new file mode 100644 index 0000000..8161a79 --- /dev/null +++ b/libconfig.spec @@ -0,0 +1,218 @@ +%bcond_without check + +Name: libconfig +Summary: C/C++ configuration file library +Version: 1.7.2 +Release: 6%{?dist} +License: LGPLv2+ +URL: http://www.hyperrealm.com/libconfig/ +Source0: https://hyperrealm.github.io/%name/dist/%name-%version.tar.gz +# Generated from libconfig 1.7.2 on Fedora 28 x86_64 (2018-07-18) +Source1: libconfig-%version.pdf +# Helper script to generate Source1 (locally) +Source2: generate-pdf.sh + +BuildRequires: gcc, gcc-c++ +BuildRequires: texinfo +BuildRequires: bison, flex + +%description +Libconfig is a simple library for manipulating structured configuration +files. This file format is more compact and more readable than XML. And +unlike XML, it is type-aware, so it is not necessary to do string parsing +in application code. + + +%package devel +Summary: Development files for libconfig +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description devel +Development libraries and headers for developing software against +libconfig. + + +%prep +%setup -q +iconv -f iso-8859-1 -t utf-8 -o AUTHORS{.utf8,} +mv AUTHORS{.utf8,} + + +%build +%configure \ + --disable-silent-rules \ + --disable-static + +make %{?_smp_mflags} + + +%install +%make_install +rm -rf $RPM_BUILD_ROOT%{_libdir}/*.la +rm -rf $RPM_BUILD_ROOT%{_infodir}/dir +install -p %{SOURCE1} doc/ + + +%if %{with check} +%check +make check +%endif + + +%ldconfig_scriptlets + +%files +%license COPYING.LIB +%doc AUTHORS ChangeLog README +%{_libdir}/libconfig*.so.11* + + +%files devel +%doc doc/libconfig-%version.pdf +%{_includedir}/libconfig* +%{_libdir}/cmake/%{name} +%{_libdir}/cmake/%{name}++ +%{_libdir}/libconfig*.so +%{_libdir}/pkgconfig/libconfig*.pc +%{_infodir}/libconfig.info* + + +%changelog +* Tue Jul 28 2020 Fedora Release Engineering - 1.7.2-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Jan 29 2020 Fedora Release Engineering - 1.7.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Jul 25 2019 Fedora Release Engineering - 1.7.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Fri Feb 01 2019 Fedora Release Engineering - 1.7.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Tue Jul 24 2018 Rex Dieter - 1.7.2-2 +- %%files: track library sonames, so bumps aren't a surprise +- %%build: --disable-silent-rules +- -devel: tighten subpkg dep with %%_isa, drop hard-coded pkgconfig dep +- use %%make_build %%make_install %%ldconfig_scriptlets + +* Mon Jul 23 2018 Pavel Raiskup - 1.7.2-1 +- new upstream release (rhbz#1602423) + +* Mon Jul 23 2018 Pavel Raiskup - 1.5-12 +- cleanup + +* Sun Jul 22 2018 Peter Robinson 1.5-11 +- Add missing gcc-c++ dep, spec cleanups + +* Fri Jul 13 2018 Fedora Release Engineering - 1.5-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed Feb 07 2018 Fedora Release Engineering - 1.5-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Feb 03 2018 Igor Gnatenko - 1.5-8 +- Switch to %%ldconfig_scriptlets + +* Thu Aug 03 2017 Fedora Release Engineering - 1.5-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 1.5-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 1.5-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Feb 04 2016 Fedora Release Engineering - 1.5-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Dec 17 2015 Tom Callaway - 1.5-3 +- fix pdf file by having a pre-generated pdf as source1 (bz 1292449) + +* Wed Jun 17 2015 Fedora Release Engineering - 1.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Tue May 19 2015 Tom Callaway - 1.5-1 +- update to 1.5 + +* Thu Apr 16 2015 Dominik Mierzejewski - 1.4.9-8 +- rebuilt for gcc-5.0.0-0.22.fc23 + +* Sun Aug 17 2014 Fedora Release Engineering - 1.4.9-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jun 07 2014 Fedora Release Engineering - 1.4.9-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Wed Sep 4 2013 Tom Callaway - 1.4.9-5 +- handle everything with doc + +* Sat Aug 03 2013 Fedora Release Engineering - 1.4.9-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Fri Jun 21 2013 Pavel Raiskup - 1.4.9-3 +- enable simple upstream test-suite during check phase + +* Thu Feb 14 2013 Fedora Release Engineering - 1.4.9-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Mon Oct 1 2012 Tom Callaway - 1.4.9-1 +- update to 1.4.9 + +* Thu Jul 19 2012 Fedora Release Engineering - 1.4.8-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Fri Jan 13 2012 Fedora Release Engineering - 1.4.8-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Fri Aug 12 2011 Tom Callaway - 1.4.8-1 +- update to 1.4.8 + +* Wed Mar 23 2011 Tom Callaway - 1.4.7-1 +- update to 1.4.7 + +* Tue Mar 1 2011 Stanislav Ochotnicky - 1.4.6-1 +- Update to 1.4.6 +- Install libconfig_tests +- Fix rpmlint warnings + +* Mon Feb 07 2011 Fedora Release Engineering - 1.4.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Wed May 5 2010 Tom "spot" Callaway - 1.4.5-1 +- update to 1.4.5 + +* Wed Aug 19 2009 Tom "spot" Callaway - 1.3.2-1 +- update to 1.3.2 + +* Fri Jul 24 2009 Fedora Release Engineering - 1.3.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Wed Feb 25 2009 Fedora Release Engineering - 1.3.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Wed Dec 24 2008 Tom "spot" Callaway - 1.3.1-2 +- prevent multilib conflicts with the generated pdf + +* Fri Sep 12 2008 Tom "spot" Callaway - 1.3.1-1 +- update to 1.3.1 + +* Tue Feb 19 2008 Fedora Release Engineering - 1.2.1-2 +- Autorebuild for GCC 4.3 + +* Tue Feb 19 2008 Tom "spot" Callaway 1.2.1-1 +- bump to 1.2.1 + +* Fri Nov 30 2007 Tom "spot" Callaway 1.2-4 +- nuke %%{_infodir}/dir, we handle it in %%post + +* Fri Nov 30 2007 Tom "spot" Callaway 1.2-3 +- move all docs to devel +- move scriptlets around to match +- move requires around to match + +* Fri Nov 30 2007 Tom "spot" Callaway 1.2-2 +- BR: texinfo-tex (not Requires) + +* Fri Nov 30 2007 Tom "spot" Callaway 1.2-1 +- Initial package for Fedora diff --git a/sources b/sources new file mode 100644 index 0000000..f334c6e --- /dev/null +++ b/sources @@ -0,0 +1,2 @@ +SHA512 (libconfig-1.7.2.tar.gz) = b0fcc403325fde217bd6509f10e8458958c8a93ff0a400da2602d62b7873e87f43ee6f1763ba30b3316e35a282a766c781a94b4d021b8c7e6ae2cf2cf108dd84 +SHA512 (libconfig-1.7.2.pdf) = d956be4f0300a1a1343694f1d2ef0943318455940de44f77347619583f1d3077c7dd12609b95a5f4b9fc4068067b492a48e743bd706f17da7381f8122400e8b6 diff --git a/tests/sanity-tests/Makefile b/tests/sanity-tests/Makefile new file mode 100644 index 0000000..cb54b1e --- /dev/null +++ b/tests/sanity-tests/Makefile @@ -0,0 +1,46 @@ +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /CoreOS/libconfig +# Description: Test if libconfig working ok +# Author: Susant Sahani +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +export TEST=/CoreOS/libconfig +export TESTVERSION=1.0 + +OBJS = test-libconfig.c +CFLAG = -Wall -g3 +CC = gcc +LIBS = -lconfig -lcmocka + +test-libconfig:${OBJ} + ${CC} ${CFLAGS} ${INCLUDES} -o $@ ${OBJS} ${LIBS} + +run: test-libconfig + ./runtest.sh +clean: + -rm -f *~ test-libconfig + +.c.o: + ${CC} ${CFLAGS} ${INCLUDES} -c $< + +CC = gcc + +include /usr/share/rhts/lib/rhts-make.include +$(METADATA): Makefile + @echo "Owner: Susant Sahani" > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test libconfig works ok" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: libconfig" >> $(METADATA) + @echo "Requires: libconfig libconfig-devel" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Releases: -Fedora 29" >> $(METADATA) + rhts-lint $(METADATA) diff --git a/tests/sanity-tests/auth.cfg b/tests/sanity-tests/auth.cfg new file mode 100644 index 0000000..8c56b42 --- /dev/null +++ b/tests/sanity-tests/auth.cfg @@ -0,0 +1,11 @@ +# authenticator + +name = "JP"; +enabled = false; +length = 186; + +ldap = { + host = "ldap.example.com"; + base = "ou=usr,o=example.com"; /* adapt this */ + retries = [10, 15, 20, 60]; // Use more than 2 +}; diff --git a/tests/sanity-tests/runtest.sh b/tests/sanity-tests/runtest.sh new file mode 100755 index 0000000..59d0eaa --- /dev/null +++ b/tests/sanity-tests/runtest.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of libconfig +# Description: Tests for libconfig +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="libconfig" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp test-libconfig /usr/bin/" + rlRun "cp auth.cfg /var/run/" + rlPhaseEnd + + rlPhaseStartTest + rlLog "Starting libconfig tests ..." + rlRun "/usr/bin/test-libconfig" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/test-libconfig /var/run/auth.cfg" + rlLog "libconfig tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/sanity-tests/test-libconfig.c b/tests/sanity-tests/test-libconfig.c new file mode 100644 index 0000000..5df2afd --- /dev/null +++ b/tests/sanity-tests/test-libconfig.c @@ -0,0 +1,131 @@ +/* +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# Description: libconfig +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define TEST_WRITE_FILE_NAME "/var/run/example.cfg" +#define TEST_READ_FILE_NAME "/var/run/auth.cfg" + +static void test_config_read(void **state) { + const char *base = NULL, *host = NULL, *name = NULL; + const config_setting_t *retries; + int aretries[] = {10, 15, 20, 60}; + int count, n, enabled; + config_t cfg, *cf; + + cf = &cfg; + config_init(cf); + + assert_non_null(config_read_file(cf, TEST_READ_FILE_NAME)); + + assert_true(config_lookup_string(cf, "name", &name) >=0); + assert_string_equal(name, "JP"); + + assert_true(config_lookup_bool(cf, "enabled", &enabled) >=0); + assert_int_equal(enabled, 0); + + assert_true((config_lookup_string(cf, "ldap.host", &host)) >=0); + assert_string_equal(host, "ldap.example.com"); + + assert_true((config_lookup_string(cf, "ldap.base", &base)) >=0); + assert_string_equal(base , "ou=usr,o=example.com"); + + assert_non_null((retries = config_lookup(cf, "ldap.retries"))); + count = config_setting_length(retries); + + assert_int_equal(count, 4); + for (n = 0; n < count; n++) + assert_int_equal(aretries[n], config_setting_get_int_elem(retries, n)); + + config_destroy(cf); +} + +static void test_config_write(void **state) { + config_setting_t *root, *setting, *group, *array; + const char *street, *city, *st, *str; + config_t cfg, *cf; + int i, zip; + + config_init(&cfg); + root = config_root_setting(&cfg); + + assert_non_null((group = config_setting_add(root, "address", CONFIG_TYPE_GROUP))); + + assert_non_null((setting = config_setting_add(group, "street", CONFIG_TYPE_STRING))); + assert_true(config_setting_set_string(setting, "1 Woz Way") >= 0); + + assert_non_null((setting = config_setting_add(group, "city", CONFIG_TYPE_STRING))); + assert_true(config_setting_set_string(setting, "San Jose") >= 0); + + assert_non_null((setting = config_setting_add(group, "state", CONFIG_TYPE_STRING))); + assert_true(config_setting_set_string(setting, "CA") >= 0); + + assert_non_null((setting = config_setting_add(group, "zip", CONFIG_TYPE_INT))); + assert_true(config_setting_set_int(setting, 95110) >= 0); + + assert_non_null((array = config_setting_add(root, "numbers", CONFIG_TYPE_ARRAY))); + + for(i = 0; i < 10; ++i) { + assert_non_null((setting = config_setting_add(array, NULL, CONFIG_TYPE_INT))); + assert_true(config_setting_set_int(setting, 10 * i) >=0); + } + + assert_non_null((config_write_file(&cfg, TEST_WRITE_FILE_NAME))); + config_destroy(&cfg); + + /* Read Back and test */ + config_init(&cfg); + + assert_non_null((config_read_file(&cfg, TEST_WRITE_FILE_NAME))); + assert_non_null((setting = config_lookup(&cfg, "address"))); + + assert_true(config_setting_lookup_string(setting, "street", &street) >= 0); + assert_string_equal(street, "1 Woz Way"); + + assert_true(config_setting_lookup_string(setting, "city", &city) >=0); + assert_string_equal(city, "San Jose"); + + assert_true(config_setting_lookup_string(setting, "state", &st) >=0); + assert_string_equal(st, "CA"); + + assert_true(config_setting_lookup_int(setting, "zip", &zip) >=0); + assert_int_equal(zip, 95110); + + array = config_lookup(&cfg, "numbers"); + if(array) { + int count, n; + + count = config_setting_length(array); + for (n = 0; n < count; n++) { + assert_int_equal(n * 10, config_setting_get_int_elem(array, n)); + } + } + config_destroy(&cfg); + + unlink(TEST_WRITE_FILE_NAME); +} + +int main(int argc, char *argv[]) { + const struct CMUnitTest libconfig_tests[] = { + cmocka_unit_test(test_config_write), + cmocka_unit_test(test_config_read), + }; + + return cmocka_run_group_tests(libconfig_tests, NULL, NULL); +} diff --git a/tests/tests.yml b/tests/tests.yml new file mode 100644 index 0000000..0fde44c --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,13 @@ +- hosts: localhost + roles: + - role: standard-test-beakerlib + tags: + - classic + tests: + - sanity-tests + required_packages: + - libconfig + - libconfig-devel + - libcmocka + - libcmocka-devel + - gcc