- use librtti
- Fix issue to xce_get() api cause client side crash - add parse resreq section - add rusage parser - parse resreq with basic support alternative & compound, still miss select
This commit is contained in:
parent
e7dc09c604
commit
cd4f3953b2
20 changed files with 1422 additions and 15 deletions
|
|
@ -21,10 +21,15 @@ extern void test_group(void);
|
|||
extern void test_xlist(void);
|
||||
extern void test_limit(void);
|
||||
extern void test_xvec(void);
|
||||
extern void test_resreq(void);
|
||||
|
||||
void setUp(void) { return; }
|
||||
|
||||
void tearDown(void) { return; }
|
||||
void tearDown(void)
|
||||
{
|
||||
printf("\n-----------------------------------------------------\n");
|
||||
return;
|
||||
}
|
||||
|
||||
static char doc[] = "xcelib_test";
|
||||
static char args_doc[] = "";
|
||||
|
|
@ -107,6 +112,7 @@ int main(int argc, char* argv[])
|
|||
TEST(test_xlist);
|
||||
TEST(test_limit);
|
||||
TEST(test_xvec);
|
||||
TEST(test_resreq);
|
||||
|
||||
return UNITY_END();
|
||||
}
|
||||
|
|
|
|||
343
src/lib/testsuite/test_resreq.c
Normal file
343
src/lib/testsuite/test_resreq.c
Normal file
|
|
@ -0,0 +1,343 @@
|
|||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <unity/unity.h>
|
||||
|
||||
#include "resreq.h"
|
||||
#include "utils.h"
|
||||
|
||||
void test_parse_section1(void)
|
||||
{
|
||||
char* resreq = "type == any";
|
||||
char* errmsg = NULL;
|
||||
int rc = 0;
|
||||
xce_resreq_data_t data;
|
||||
|
||||
rc = parse_section(&data, (char*)resreq, &errmsg);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(data.selectString != NULL);
|
||||
TEST_ASSERT_TRUE((data.rusageString == NULL) && (data.spanString == NULL)
|
||||
&& (data.sameString == NULL)
|
||||
&& (data.affinityString == NULL));
|
||||
TEST_ASSERT_TRUE(errmsg == NULL);
|
||||
|
||||
printf("select: %s\n", data.selectString);
|
||||
FREEUP(data.selectString);
|
||||
}
|
||||
|
||||
void test_parse_section2(void)
|
||||
{
|
||||
char* resreq = "select[type == any]";
|
||||
char* errmsg = NULL;
|
||||
int rc = 0;
|
||||
xce_resreq_data_t data;
|
||||
|
||||
rc = parse_section(&data, (char*)resreq, &errmsg);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(data.selectString != NULL);
|
||||
TEST_ASSERT_TRUE((data.rusageString == NULL) && (data.spanString == NULL)
|
||||
&& (data.sameString == NULL)
|
||||
&& (data.affinityString == NULL));
|
||||
TEST_ASSERT_TRUE(errmsg == NULL);
|
||||
|
||||
printf("select: %s\n", data.selectString);
|
||||
FREEUP(data.selectString);
|
||||
}
|
||||
|
||||
void test_parse_section_fail(void)
|
||||
{
|
||||
char* resreq = "select[type == any] rusage[mem=20:lic=55] span[ptile=1] "
|
||||
"same[type] same[abcd] affinity[core(20)]";
|
||||
char* errmsg = NULL;
|
||||
int rc = 0;
|
||||
xce_resreq_data_t data;
|
||||
|
||||
rc = parse_section(&data, (char*)resreq, &errmsg);
|
||||
TEST_ASSERT_TRUE(rc < 0);
|
||||
TEST_ASSERT_TRUE(data.selectString == NULL);
|
||||
TEST_ASSERT_TRUE((data.rusageString == NULL) && (data.spanString == NULL)
|
||||
&& (data.sameString == NULL)
|
||||
&& (data.affinityString == NULL));
|
||||
TEST_ASSERT_TRUE(errmsg != NULL);
|
||||
|
||||
printf("Parse Error:\n%s\n", errmsg);
|
||||
FREEUP(errmsg);
|
||||
}
|
||||
|
||||
void test_parse_rusage1(void)
|
||||
{
|
||||
char* rusageString
|
||||
= "mem=20:duration=300:decay=1,lic=55:duration=20m:decay=0";
|
||||
char* errmsg = NULL;
|
||||
int rc = 0;
|
||||
xlist_t rusages;
|
||||
|
||||
xlist_init(&rusages, 8);
|
||||
|
||||
rc = parse_rusage(&rusages, rusageString, &errmsg);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
if (rc >= 0) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < rusages.count; i++) {
|
||||
rusage_value_t* v = (rusage_value_t*)xlist_get(&rusages, i);
|
||||
|
||||
TEST_ASSERT_TRUE(v != NULL);
|
||||
switch (i) {
|
||||
case 0:
|
||||
TEST_ASSERT_TRUE(strcmp(v->res, "mem") == 0);
|
||||
TEST_ASSERT_TRUE(fabs(v->value - 20.0) < 0.001);
|
||||
TEST_ASSERT_TRUE(fabs(v->duration - 18000) < 0.001);
|
||||
TEST_ASSERT_TRUE(v->per_flag == 0);
|
||||
TEST_ASSERT_TRUE(v->decay_flag == 1);
|
||||
break;
|
||||
case 1:
|
||||
TEST_ASSERT_TRUE(strcmp(v->res, "lic") == 0);
|
||||
TEST_ASSERT_TRUE(fabs(v->value - 55.0) < 0.001);
|
||||
TEST_ASSERT_TRUE(fabs(v->duration - 1200) < 0.001);
|
||||
TEST_ASSERT_TRUE(v->per_flag == 0);
|
||||
TEST_ASSERT_TRUE(v->decay_flag == 0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
printf("rusage: %s %f %d %f %d\n", v->res, v->value, v->per_flag,
|
||||
v->duration, v->decay_flag);
|
||||
|
||||
kill_rusage_value(v);
|
||||
free(v);
|
||||
}
|
||||
|
||||
xlist_fini(&rusages);
|
||||
}
|
||||
}
|
||||
|
||||
void test_parse_rusage2(void)
|
||||
{
|
||||
char* rusageString
|
||||
= "mem=20/host:duration=300:decay=1,lic=55/job:duration=20m:decay=0";
|
||||
char* errmsg = NULL;
|
||||
int rc = 0;
|
||||
xlist_t rusages;
|
||||
|
||||
xlist_init(&rusages, 8);
|
||||
|
||||
rc = parse_rusage(&rusages, rusageString, &errmsg);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
if (rc >= 0) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < rusages.count; i++) {
|
||||
rusage_value_t* v = (rusage_value_t*)xlist_get(&rusages, i);
|
||||
|
||||
TEST_ASSERT_TRUE(v != NULL);
|
||||
switch (i) {
|
||||
case 0:
|
||||
TEST_ASSERT_TRUE(strcmp(v->res, "mem") == 0);
|
||||
TEST_ASSERT_TRUE(fabs(v->value - 20.0) < 0.001);
|
||||
TEST_ASSERT_TRUE(fabs(v->duration - 18000) < 0.001);
|
||||
TEST_ASSERT_TRUE(v->per_flag == 2);
|
||||
TEST_ASSERT_TRUE(v->decay_flag == 1);
|
||||
break;
|
||||
case 1:
|
||||
TEST_ASSERT_TRUE(strcmp(v->res, "lic") == 0);
|
||||
TEST_ASSERT_TRUE(fabs(v->value - 55.0) < 0.001);
|
||||
TEST_ASSERT_TRUE(fabs(v->duration - 1200) < 0.001);
|
||||
TEST_ASSERT_TRUE(v->per_flag == 1);
|
||||
TEST_ASSERT_TRUE(v->decay_flag == 0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
printf("rusage: %s %f %d %f %d\n", v->res, v->value, v->per_flag,
|
||||
v->duration, v->decay_flag);
|
||||
|
||||
kill_rusage_value(v);
|
||||
free(v);
|
||||
}
|
||||
|
||||
xlist_fini(&rusages);
|
||||
}
|
||||
}
|
||||
|
||||
void test_resreq_primary(void)
|
||||
{
|
||||
char* resreqString
|
||||
= "select[type==any] "
|
||||
"rusage[mem=20:duration=300:decay=1,lic=55:duration=20m:decay=0]";
|
||||
char* errmsg = NULL;
|
||||
int rc = 0;
|
||||
xce_primary_resreq_t resreq;
|
||||
|
||||
rc = parse_resreq_primary(&resreq, resreqString, &errmsg);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
if (rc >= 0) {
|
||||
int i;
|
||||
xlist_t* rusages = &(resreq.rusages);
|
||||
|
||||
for (i = 0; i < rusages->count; i++) {
|
||||
rusage_value_t* v = (rusage_value_t*)xlist_get(rusages, i);
|
||||
|
||||
TEST_ASSERT_TRUE(v != NULL);
|
||||
switch (i) {
|
||||
case 0:
|
||||
TEST_ASSERT_TRUE(strcmp(v->res, "mem") == 0);
|
||||
TEST_ASSERT_TRUE(fabs(v->value - 20.0) < 0.001);
|
||||
TEST_ASSERT_TRUE(fabs(v->duration - 18000) < 0.001);
|
||||
TEST_ASSERT_TRUE(v->per_flag == 0);
|
||||
TEST_ASSERT_TRUE(v->decay_flag == 1);
|
||||
break;
|
||||
case 1:
|
||||
TEST_ASSERT_TRUE(strcmp(v->res, "lic") == 0);
|
||||
TEST_ASSERT_TRUE(fabs(v->value - 55.0) < 0.001);
|
||||
TEST_ASSERT_TRUE(fabs(v->duration - 1200) < 0.001);
|
||||
TEST_ASSERT_TRUE(v->per_flag == 0);
|
||||
TEST_ASSERT_TRUE(v->decay_flag == 0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
printf("rusage: %s %f %d %f %d\n", v->res, v->value, v->per_flag,
|
||||
v->duration, v->decay_flag);
|
||||
|
||||
kill_rusage_value(v);
|
||||
free(v);
|
||||
}
|
||||
|
||||
xlist_fini(rusages);
|
||||
}
|
||||
}
|
||||
|
||||
void test_resreq1(void)
|
||||
{
|
||||
char* resreqString
|
||||
= "select[type==any] "
|
||||
"rusage[mem=20:duration=300:decay=1,lic=55:duration=20m:decay=0]";
|
||||
char* errmsg = NULL;
|
||||
int rc = 0;
|
||||
xce_resreq_t resreq;
|
||||
|
||||
rc = parse_resreq(&resreq, resreqString, &errmsg);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
if (rc >= 0) {
|
||||
int i;
|
||||
xlist_t* rusages = NULL;
|
||||
char* buf = NULL;
|
||||
|
||||
TEST_ASSERT_TRUE(resreq.tag == XCE_RESREQ_PRIMARY);
|
||||
|
||||
rusages = &(resreq.u.primary->rusages);
|
||||
|
||||
for (i = 0; i < rusages->count; i++) {
|
||||
rusage_value_t* v = (rusage_value_t*)xlist_get(rusages, i);
|
||||
|
||||
TEST_ASSERT_TRUE(v != NULL);
|
||||
switch (i) {
|
||||
case 0:
|
||||
TEST_ASSERT_TRUE(strcmp(v->res, "mem") == 0);
|
||||
TEST_ASSERT_TRUE(fabs(v->value - 20.0) < 0.001);
|
||||
TEST_ASSERT_TRUE(fabs(v->duration - 18000) < 0.001);
|
||||
TEST_ASSERT_TRUE(v->per_flag == 0);
|
||||
TEST_ASSERT_TRUE(v->decay_flag == 1);
|
||||
break;
|
||||
case 1:
|
||||
TEST_ASSERT_TRUE(strcmp(v->res, "lic") == 0);
|
||||
TEST_ASSERT_TRUE(fabs(v->value - 55.0) < 0.001);
|
||||
TEST_ASSERT_TRUE(fabs(v->duration - 1200) < 0.001);
|
||||
TEST_ASSERT_TRUE(v->per_flag == 0);
|
||||
TEST_ASSERT_TRUE(v->decay_flag == 0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
printf("rusage: %s %f %d %f %d\n", v->res, v->value, v->per_flag,
|
||||
v->duration, v->decay_flag);
|
||||
}
|
||||
|
||||
rc = format_resreq(&buf, &resreq);
|
||||
if (rc >= 0) {
|
||||
printf("%s\n", buf);
|
||||
}
|
||||
|
||||
FREEUP(buf);
|
||||
kill_resreq(&resreq);
|
||||
}
|
||||
}
|
||||
|
||||
void test_resreq2(void)
|
||||
{
|
||||
char* resreqString = "2*{rusage[mem=100:duration=20:decay=1]} + "
|
||||
"4*{rusage[mem=80:duration=30:decay=1]}";
|
||||
char* errmsg = NULL;
|
||||
int rc = 0;
|
||||
xce_resreq_t resreq;
|
||||
|
||||
memset(&resreq, 0x0, sizeof(resreq));
|
||||
|
||||
rc = parse_resreq(&resreq, resreqString, &errmsg);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
if (rc >= 0) {
|
||||
char* buf = NULL;
|
||||
|
||||
TEST_ASSERT_TRUE(resreq.tag == XCE_RESREQ_COMPOUND);
|
||||
|
||||
rc = format_resreq(&buf, &resreq);
|
||||
if (rc >= 0) {
|
||||
printf("%s\n", buf);
|
||||
}
|
||||
|
||||
FREEUP(buf);
|
||||
kill_resreq(&resreq);
|
||||
}
|
||||
}
|
||||
|
||||
void test_resreq3(void)
|
||||
{
|
||||
char* resreqString = "{2*{rusage[mem=100:duration=20:decay=1]} + "
|
||||
"4*{rusage[mem=80:duration=30:decay=1]}} || "
|
||||
"{3*{rusage[mem=150:duration=15:decay=1]} + "
|
||||
"6*{rusage[mem=120:duration=20:decay=1]}} ";
|
||||
char* errmsg = NULL;
|
||||
int rc = 0;
|
||||
xce_resreq_t resreq;
|
||||
|
||||
memset(&resreq, 0x0, sizeof(resreq));
|
||||
|
||||
rc = parse_resreq(&resreq, resreqString, &errmsg);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
if (rc >= 0) {
|
||||
char* buf = NULL;
|
||||
|
||||
TEST_ASSERT_TRUE(resreq.tag == XCE_RESREQ_ALTER);
|
||||
|
||||
rc = format_resreq(&buf, &resreq);
|
||||
if (rc >= 0) {
|
||||
printf("%s\n", buf);
|
||||
}
|
||||
|
||||
if (buf != NULL) {
|
||||
free(buf);
|
||||
}
|
||||
|
||||
kill_resreq(&resreq);
|
||||
}
|
||||
}
|
||||
|
||||
void test_resreq(void)
|
||||
{
|
||||
printf("\n>> resreq test\n\n");
|
||||
|
||||
RUN_TEST(test_parse_section1);
|
||||
RUN_TEST(test_parse_section2);
|
||||
RUN_TEST(test_parse_section_fail);
|
||||
RUN_TEST(test_parse_rusage1);
|
||||
RUN_TEST(test_parse_rusage2);
|
||||
RUN_TEST(test_resreq_primary);
|
||||
RUN_TEST(test_resreq1);
|
||||
RUN_TEST(test_resreq2);
|
||||
RUN_TEST(test_resreq3);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue