Date: Thu, 4 Apr 2013 23:21:50 GMT From: Alan Somers <asomers@FreeBSD.org> To: freebsd-gnats-submit@FreeBSD.org Subject: ports/177641: devel/kyua-cli Kyua (automated testing framework) - Command line interface Message-ID: <201304042321.r34NLoNd072858@red.freebsd.org> Resent-Message-ID: <201304042330.r34NU06T099100@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 177641 >Category: ports >Synopsis: devel/kyua-cli Kyua (automated testing framework) - Command line interface >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Thu Apr 04 23:30:00 UTC 2013 >Closed-Date: >Last-Modified: >Originator: Alan Somers >Release: 10.0-CURRENT >Organization: Spectra Logic >Environment: FreeBSD alans-fbsd10 10.0-CURRENT FreeBSD 10.0-CURRENT #0: Sat Mar 30 20:25:42 UTC 2013 root@snap.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64 Also tested on 9.1 amd64 and 9.1 i386 >Description: This is the guts of Kyua. It's an automated testing framework designed to replace ATF, but be better in every way. It's portable, but targeted primarily towards the needs of NetBSD. >How-To-Repeat: >Fix: Patch attached with submission follows: # This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # kyua-cli # kyua-cli/distinfo # kyua-cli/pkg-descr # kyua-cli/Makefile # kyua-cli/files # kyua-cli/files/patch-utils-config-nodes.ipp # kyua-cli/files/patch-utils-config-nodes.cpp # kyua-cli/files/patch-utils-config-tree.cpp # kyua-cli/files/patch-utils-config-tree.ipp # kyua-cli/pkg-plist # echo c - kyua-cli mkdir -p kyua-cli > /dev/null 2>&1 echo x - kyua-cli/distinfo sed 's/^X//' >kyua-cli/distinfo << 'c9ff18b6cae3bacd9b9a2b3a93181575' XSHA256 (kyua-cli-0.6.tar.gz) = b422d63a6db02e806d6da355486dcf6857aa54338d83a0c8b90c7da7dd4f0642 XSIZE (kyua-cli-0.6.tar.gz) = 487249 c9ff18b6cae3bacd9b9a2b3a93181575 echo x - kyua-cli/pkg-descr sed 's/^X//' >kyua-cli/pkg-descr << 'd17a2fa865e8ff2053badf677ddf82ce' XKyua (pronounced Q.A.) is a testing framework for both developers and Xusers. Kyua is different from most other testing frameworks in that it Xputs the end user experience before anything else. There are multiple Xreasons for users to run the tests themselves, and Kyua ensures that Xthey can do so in the most convenient way. X XAt the moment, Kyua is focused on implementing a solid foundation and a Xpowerful command-line tool to run tests implemented with the Automated XTesting Framework (ATF). Later on, Kyua will also provide a set of Xlanguage bindings (C, C++ and shell, at the least) to ease the Ximplementation of test cases in a variety of programming languages. X XIn effect, Kyua is intended to be a replacement for ATF. X XWWW: https://code.google.com/p/kyua/ d17a2fa865e8ff2053badf677ddf82ce echo x - kyua-cli/Makefile sed 's/^X//' >kyua-cli/Makefile << '7d8d1598bbf4040c136306039fea5b38' X# New ports collection makefile for: kyua-cli X# Date created: 27 Mar 2012 X# Whom: Alan Somers <asomers@freebsd.org> X# X# $FreeBSD$ X# X XPORTNAME= kyua-cli XPORTVERSION= 0.6 XCATEGORIES= devel XMASTER_SITES= ${MASTER_SITE_GOOGLE_CODE} XPROJECTHOST= kyua X XMAINTAINER= asomers@freebsd.org XCOMMENT= Kyua (automated testing framework) - Command line interface X XLICENSE= BSD X XLIB_DEPENDS= lutok:${PORTSDIR}/devel/lutok XLIB_DEPENDS+= sqlite3:${PORTSDIR}/databases/sqlite3 XBUILD_DEPENDS= ${LOCALBASE}/libexec/kyua-atf-tester:${PORTSDIR}/devel/kyua-testers XRUN_DEPENDS:= ${BUILD_DEPENDS} X XGNU_CONFIGURE= yes XUSE_PKGCONFIG= yes X XCONFIGURE_ARGS+= --without-doxygen X X# TODO: install the tests, once FreeBSD has a system for ports to install tests XCONFIGURE_ARGS+= --without-atf XPLIST_SUBST+= TESTS="@comment " X XMAN1= kyua-about.1 kyua-config.1 kyua-db-exec.1 kyua-db-migrate.1 XMAN1+= kyua-debug.1 kyua-help.1 kyua-list.1 kyua-report-html.1 XMAN1+= kyua-report.1 kyua-test.1 kyua.1 XMAN5= kyua.conf.5 kyuafile.5 XMAN7= kyua-build-root.7 kyua-test-filters.7 X X.include <bsd.port.mk> 7d8d1598bbf4040c136306039fea5b38 echo c - kyua-cli/files mkdir -p kyua-cli/files > /dev/null 2>&1 echo x - kyua-cli/files/patch-utils-config-nodes.ipp sed 's/^X//' >kyua-cli/files/patch-utils-config-nodes.ipp << 'd3870e6e5b236f15c31eaea4d4cfbafe' X--- utils/config/nodes.ipp.orig 2013-03-28 12:56:35.697127706 -0600 X+++ utils/config/nodes.ipp 2013-03-28 12:56:49.139128561 -0600 X@@ -39,6 +39,7 @@ X #include "utils/format/macros.hpp" X #include "utils/optional.ipp" X #include "utils/text/exceptions.hpp" X+#include "utils/units.hpp" X #include "utils/text/operations.ipp" X #include "utils/sanity.hpp" X d3870e6e5b236f15c31eaea4d4cfbafe echo x - kyua-cli/files/patch-utils-config-nodes.cpp sed 's/^X//' >kyua-cli/files/patch-utils-config-nodes.cpp << 'e0cb96d9fc217122a526a427bd641bb9' X--- utils/config/nodes.cpp.old X+++ utils/config/nodes.cpp X@@ -112,11 +112,11 @@ config::detail::inner_node::lookup_ro(const tree_key& key, X return (*child_iter).second; X } else { X PRE(key_pos < key.size() - 1); X- try { X- const inner_node& child = dynamic_cast< const inner_node& >( X- *(*child_iter).second); X- return child.lookup_ro(key, key_pos + 1); X- } catch (const std::bad_cast& e) { X+ const inner_node* child = dynamic_cast< const inner_node* >( X+ (*child_iter).second); X+ if (child != NULL) { X+ return child->lookup_ro(key, key_pos + 1); X+ } else { X throw unknown_key_error( X key, "Cannot address incomplete configuration property '%s'"); X } X@@ -163,21 +163,19 @@ config::detail::inner_node::lookup_rw(const tree_key& key, X } X X if (key_pos == key.size() - 1) { X- try { X- leaf_node& child = dynamic_cast< leaf_node& >( X- *(*child_iter).second); X- return &child; X- } catch (const std::bad_cast& unused_error) { X+ leaf_node* child = dynamic_cast< leaf_node* >((*child_iter).second); X+ if (child != NULL) { X+ return child; X+ } else { X throw value_error(F("Invalid value for key '%s'") % X flatten_key(key)); X } X } else { X PRE(key_pos < key.size() - 1); X- try { X- inner_node& child = dynamic_cast< inner_node& >( X- *(*child_iter).second); X- return child.lookup_rw(key, key_pos + 1, new_node); X- } catch (const std::bad_cast& e) { X+ inner_node* child = dynamic_cast< inner_node* >((*child_iter).second); X+ if (child != NULL) { X+ return child->lookup_rw(key, key_pos + 1, new_node); X+ } else { X throw unknown_key_error( X key, "Cannot address incomplete configuration property '%s'"); X } X@@ -198,13 +196,14 @@ config::detail::inner_node::all_properties(properties_map& properties, X iter != _children.end(); ++iter) { X tree_key child_key = key; X child_key.push_back((*iter).first); X- try { X- leaf_node& child = dynamic_cast< leaf_node& >(*(*iter).second); X- if (child.is_set()) X- properties[flatten_key(child_key)] = child.to_string(); X- } catch (const std::bad_cast& unused_error) { X- inner_node& child = dynamic_cast< inner_node& >(*(*iter).second); X- child.all_properties(properties, child_key); X+ leaf_node* child = dynamic_cast< leaf_node* >((*iter).second); X+ if (child != NULL) { X+ if (child->is_set()) X+ properties[flatten_key(child_key)] = child->to_string(); X+ } else { X+ inner_node* child2 = dynamic_cast< inner_node* >((*iter).second); X+ INV(child2 != NULL); X+ child2->all_properties(properties, child_key); X } X } X } X@@ -261,11 +260,11 @@ config::detail::static_inner_node::define(const tree_key& key, X _children.insert(children_map::value_type(key[key_pos], child_ptr)); X child_ptr->define(key, key_pos + 1, new_node); X } else { X- try { X- static_inner_node& child = dynamic_cast< static_inner_node& >( X- *(*child_iter).second); X- child.define(key, key_pos + 1, new_node); X- } catch (const std::bad_cast& e) { X+ static_inner_node* child = dynamic_cast< static_inner_node* >( X+ (*child_iter).second); X+ if (child != NULL) { X+ child->define(key, key_pos + 1, new_node); X+ } else { X UNREACHABLE; X } X } e0cb96d9fc217122a526a427bd641bb9 echo x - kyua-cli/files/patch-utils-config-tree.cpp sed 's/^X//' >kyua-cli/files/patch-utils-config-tree.cpp << '644c709487c71eed6328ae6d1c770cc6' X--- utils/config/tree.cpp.old X+++ utils/config/tree.cpp X@@ -109,11 +109,10 @@ config::tree::is_set(const std::string& dotted_key) const X const detail::tree_key key = detail::parse_key(dotted_key); X try { X const detail::base_node* raw_node = _root->lookup_ro(key, 0); X- try { X- const leaf_node& child = dynamic_cast< const leaf_node& >( X- *raw_node); X- return child.is_set(); X- } catch (const std::bad_cast& unused_error) { X+ const leaf_node* child = dynamic_cast< const leaf_node* >(raw_node); X+ if (child != NULL) { X+ return child->is_set(); X+ } else { X return false; X } X } catch (const unknown_key_error& unused_error) { X@@ -134,10 +133,10 @@ config::tree::push_lua(const std::string& dotted_key, lutok::state& state) const X { X const detail::tree_key key = detail::parse_key(dotted_key); X const detail::base_node* raw_node = _root->lookup_ro(key, 0); X- try { X- const leaf_node& child = dynamic_cast< const leaf_node& >(*raw_node); X- child.push_lua(state); X- } catch (const std::bad_cast& unused_error) { X+ const leaf_node* child = dynamic_cast< const leaf_node* >(raw_node); X+ if (child != NULL) { X+ child->push_lua(state); X+ } else { X throw unknown_key_error(key); X } X } X@@ -159,10 +158,10 @@ config::tree::set_lua(const std::string& dotted_key, lutok::state& state, X const detail::tree_key key = detail::parse_key(dotted_key); X detail::base_node* raw_node = _root->lookup_rw( X key, 0, detail::new_node< string_node >); X- try { X- leaf_node& child = dynamic_cast< leaf_node& >(*raw_node); X- child.set_lua(state, value_index); X- } catch (const std::bad_cast& unused_error) { X+ leaf_node* child = dynamic_cast< leaf_node* >(raw_node); X+ if (child != NULL) { X+ child->set_lua(state, value_index); X+ } else { X throw value_error(F("Invalid value for key '%s'") % X detail::flatten_key(key)); X } X@@ -182,10 +181,10 @@ config::tree::lookup_string(const std::string& dotted_key) const X { X const detail::tree_key key = detail::parse_key(dotted_key); X const detail::base_node* raw_node = _root->lookup_ro(key, 0); X- try { X- const leaf_node& child = dynamic_cast< const leaf_node& >(*raw_node); X- return child.to_string(); X- } catch (const std::bad_cast& unused_error) { X+ const leaf_node* child = dynamic_cast< const leaf_node* >(raw_node); X+ if (child != NULL) { X+ return child->to_string(); X+ } else { X throw unknown_key_error(key); X } X } X@@ -210,10 +209,10 @@ config::tree::set_string(const std::string& dotted_key, X const detail::tree_key key = detail::parse_key(dotted_key); X detail::base_node* raw_node = _root->lookup_rw( X key, 0, detail::new_node< string_node >); X- try { X- leaf_node& child = dynamic_cast< leaf_node& >(*raw_node); X- child.set_string(raw_value); X- } catch (const std::bad_cast& unused_error) { X+ leaf_node* child = dynamic_cast< leaf_node* >(raw_node); X+ if (child != NULL) { X+ child->set_string(raw_value); X+ } else { X throw value_error(F("Invalid value for key '%s'") % X detail::flatten_key(key)); X } X@@ -247,11 +246,11 @@ config::tree::all_properties(const std::string& dotted_key, X key = detail::parse_key(dotted_key); X raw_node = _root->lookup_ro(key, 0); X } X- try { X- const detail::inner_node& child = X- dynamic_cast< const detail::inner_node& >(*raw_node); X- child.all_properties(properties, key); X- } catch (const std::bad_cast& unused_error) { X+ const detail::inner_node* child = X+ dynamic_cast< const detail::inner_node* >(raw_node); X+ if (child != NULL) { X+ child->all_properties(properties, key); X+ } else { X INV(!dotted_key.empty()); X throw value_error(F("Cannot export properties from a leaf node; " X "'%s' given") % dotted_key); 644c709487c71eed6328ae6d1c770cc6 echo x - kyua-cli/files/patch-utils-config-tree.ipp sed 's/^X//' >kyua-cli/files/patch-utils-config-tree.ipp << '8832030cfc9162a8ea00791d84b9ca06' X--- utils/config/tree.ipp.old X+++ utils/config/tree.ipp X@@ -79,13 +79,13 @@ config::tree::lookup(const std::string& dotted_key) const X { X const detail::tree_key key = detail::parse_key(dotted_key); X const detail::base_node* raw_node = _root->lookup_ro(key, 0); X- try { X- const LeafType& child = dynamic_cast< const LeafType& >(*raw_node); X- if (child.is_set()) X- return child.value(); X+ const LeafType* child = dynamic_cast< const LeafType* >(raw_node); X+ if (child != NULL) { X+ if (child->is_set()) X+ return child->value(); X else X throw unknown_key_error(key); X- } catch (const std::bad_cast& unused_error) { X+ } else { X throw unknown_key_error(key); X } X } X@@ -107,13 +107,13 @@ config::tree::lookup_rw(const std::string& dotted_key) X const detail::tree_key key = detail::parse_key(dotted_key); X detail::base_node* raw_node = _root->lookup_rw( X key, 0, detail::new_node< LeafType >); X- try { X- LeafType& child = dynamic_cast< LeafType& >(*raw_node); X- if (child.is_set()) X- return child.value(); X+ LeafType* child = dynamic_cast< LeafType* >(raw_node); X+ if (child != NULL) { X+ if (child->is_set()) X+ return child->value(); X else X throw unknown_key_error(key); X- } catch (const std::bad_cast& unused_error) { X+ } else { X throw unknown_key_error(key); X } X } X@@ -136,10 +136,10 @@ config::tree::set(const std::string& dotted_key, X const detail::tree_key key = detail::parse_key(dotted_key); X leaf_node* raw_node = _root->lookup_rw(key, 0, X detail::new_node< LeafType >); X- try { X- LeafType& child = dynamic_cast< LeafType& >(*raw_node); X- child.set(value); X- } catch (const std::bad_cast& unused_error) { X+ LeafType* child = dynamic_cast< LeafType* >(raw_node); X+ if (child != NULL) { X+ child->set(value); X+ } else { X throw value_error(F("Invalid value for key '%s'") % X detail::flatten_key(key)); X } 8832030cfc9162a8ea00791d84b9ca06 echo x - kyua-cli/pkg-plist sed 's/^X//' >kyua-cli/pkg-plist << 'b13ea78f7e8b3b16eef55d77ff658cc2' Xbin/kyua Xshare/doc/kyua-cli/AUTHORS Xshare/doc/kyua-cli/COPYING Xshare/doc/kyua-cli/NEWS Xshare/doc/kyua-cli/README Xshare/kyua-cli/examples/Kyuafile.top Xshare/kyua-cli/examples/kyua.conf Xshare/kyua-cli/misc/context.html Xshare/kyua-cli/misc/index.html Xshare/kyua-cli/misc/report.css Xshare/kyua-cli/misc/test_result.html Xshare/kyua-cli/store/migrate_v1_v2.sql Xshare/kyua-cli/store/schema_v2.sql X@dirrm share/kyua-cli/store X@dirrm share/kyua-cli/misc X@dirrm share/kyua-cli/examples X@dirrm share/kyua-cli X@dirrm share/doc/kyua-cli b13ea78f7e8b3b16eef55d77ff658cc2 exit >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304042321.r34NLoNd072858>