cgpath.c revision 948955a2d6f8e4e28bceada9666c5831de4a6bb8
/* liblxcapi
*
* Copyright � 2012 Serge Hallyn <serge.hallyn@ubuntu.com>.
* Copyright � 2012 Canonical Ltd.
*
* it under the terms of the GNU General Public License version 2, as
* published by the Free Software Foundation.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <lxc/lxccontainer.h>
#include <limits.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include "../lxc/commands.h"
#define MYNAME "lxctest1"
} while (0)
/*
* test_running_container: test cgroup functions against a running container
*
* @group : name of the container group or NULL for default "lxc"
* @name : name of the container
*/
static int test_running_container(const char *lxcpath,
{
int ret = -1;
struct lxc_container *c = NULL;
char *cgrelpath;
char *cgabspath;
goto err1;
}
if (!c->is_defined(c)) {
goto err2;
}
if (!cgrelpath) {
TSTERR("lxc_cmd_get_cgroup_path returned NULL");
goto err2;
}
goto err3;
}
c->name, c->config_path);
if (ret < 0) {
TSTERR("lxc_cgroup_get failed");
goto err3;
}
if (ret < 0) {
TSTERR("lxc_cgroup_set_bypath failed");
goto err3;
}
c->name, c->config_path);
if (ret < 0) {
TSTERR("lxc_cgroup_get failed");
goto err3;
}
goto err3;
}
/* restore original value */
c->name, c->config_path);
if (ret < 0) {
TSTERR("lxc_cgroup_set failed");
goto err3;
}
c->name, c->config_path);
if (ret < 0) {
TSTERR("lxc_cgroup_get failed");
goto err3;
}
goto err3;
}
if (!cgabspath) {
TSTERR("lxc_cgroup_path_get returned NULL");
goto err3;
}
goto err4;
}
if (!cgabspath) {
TSTERR("lxc_cgroup_path_get returned NULL");
goto err3;
}
goto err4;
}
ret = 0;
err4:
err3:
err2:
err1:
return ret;
}
static int test_container(const char *lxcpath,
const char *template)
{
int ret;
struct lxc_container *c = NULL;
if (lxcpath) {
goto out1;
}
}
ret = -1;
goto out1;
}
if (c->is_defined(c)) {
c->stop(c);
c->destroy(c);
}
goto out2;
}
c->load_config(c, NULL);
c->want_daemonize(c);
goto out3;
}
c->stop(c);
out3:
c->destroy(c);
out2:
out1:
return ret;
}
int main()
{
int ret = EXIT_FAILURE;
/* won't require privilege necessarily once users are classified by
* pam_cgroup */
if (geteuid() != 0) {
TSTERR("requires privilege");
exit(0);
}
/*
* This is useful for running with valgrind to test for memory
* leaks. The container should already be running, we can't start
* the container ourselves because valgrind gets confused by lxc's
* internal calls to clone.
*/
goto out;
printf("Running container cgroup tests...Passed\n");
#else
goto out;
printf("Container creation tests...Passed\n");
goto out;
printf("Container creation with LXCPATH tests...Passed\n");
#endif
ret = EXIT_SUCCESS;
out:
return ret;
}