示例#1
0
END_TEST

START_TEST (test_string)
{
  char *test = "test";
  OmlValue v, v2;
  OmlValueU vu;
  size_t bcount = xmembytes();
  size_t alloc_diff;

  oml_value_init(&v);
  oml_value_init(&v2);

  omlc_zero(vu);

  /* Prepare the OmlValueU to be duplicated in the OmlValue */
  omlc_set_const_string(vu, test);

  oml_value_set(&v, &vu, OML_STRING_VALUE);
  alloc_diff = xmembytes() - bcount - sizeof(size_t);
  bcount = xmembytes();
  fail_if(alloc_diff < strlen(test) + 1,
      "OmlValue string allocated memory not big enough (%d instead of at least %d)",
      alloc_diff, strlen(test) + 1);

  oml_value_duplicate(&v2, &v);
  fail_if(omlc_get_string_ptr(*oml_value_get_value(&v2)) == omlc_get_string_ptr(*oml_value_get_value(&v)),
      "Copied OmlValue string pointer not allocated properly");
  fail_if(strcmp(omlc_get_string_ptr(*oml_value_get_value(&v2)), omlc_get_string_ptr(*oml_value_get_value(&v))),
      "Copied OmlValue string mismatch ('%s' instead of '%s')",
      omlc_get_string_ptr(*oml_value_get_value(&v2)), omlc_get_string_ptr(*oml_value_get_value(&v)));
  fail_unless(omlc_get_string_length(*oml_value_get_value(&v2)) == strlen(omlc_get_string_ptr(*oml_value_get_value(&v2))),
      "Copied OmlValue string length not set properly (%d instead of %d)",
      omlc_get_string_length(*oml_value_get_value(&v2)), strlen(omlc_get_string_ptr(*oml_value_get_value(&v2))) + 1);
  alloc_diff = xmembytes() - bcount - sizeof(size_t); /* oml_malloc() always allocates at least sizeof(size_t) more for bookkeeping */
  bcount = xmembytes();
  fail_if(alloc_diff < strlen(omlc_get_string_ptr(*oml_value_get_value(&v))) + 1,
      "Copied OmlValue string allocated memory not big enough (%d instead of at least %d)",
      alloc_diff, strlen(omlc_get_string_ptr(*oml_value_get_value(&v))) + 1);
  fail_unless(omlc_get_string_size(*oml_value_get_value(&v2)) == oml_malloc_usable_size(omlc_get_string_ptr(*oml_value_get_value(&v2))),
      "Copied OmlValue string allocated size not set properly (%d instead of %d)",
      omlc_get_string_size(*oml_value_get_value(&v2)), oml_malloc_usable_size(omlc_get_string_ptr(*oml_value_get_value(&v2))));
  fail_unless(omlc_get_string_is_const(*oml_value_get_value(&v2)) == 0,
      "Copied OmlValue string should not be constant");

  oml_value_set_type(&v, OML_UINT64_VALUE);
  fail_unless(xmembytes() < bcount,
      "OmlValue string  was not freed after oml_value_set_type() (%d allocated, which is not less than %d)",
      xmembytes(), bcount);
  bcount = xmembytes();

  oml_value_reset(&v2);
  fail_unless(xmembytes() < bcount,
      "OmlValue string  was not freed after oml_value_reset() (%d allocated, which is not less than %d)",
      xmembytes(), bcount);
  bcount = xmembytes();

  oml_value_reset(&v);
  omlc_reset_string(vu);
}
示例#2
0
int
main(int argc, const char *argv[])
{
  int c, i, ret;

  /* Reconstruct command line */
  size_t cmdline_len = 0;
  for(i = 0; i < argc; i++) {
    cmdline_len += strlen(argv[i]) + 1;
  }
  char *cmdline = oml_malloc(cmdline_len);
  cmdline[0] = '\0';
  for(i = 0; i < argc; i++) {
    strncat(cmdline, argv[i], cmdline_len);
    cmdline_len -= strlen(argv[i]);
    strncat(cmdline, " ", cmdline_len);
    cmdline_len--;
  }

  /* Initialize OML */
  if((ret = omlc_init("generator", &argc, argv, NULL)) < 0) {
    logerror("Could not initialise OML\n");
    return -1;
  }

  /* Parse command line arguments */
  poptContext optCon = poptGetContext(NULL, argc, argv, options, 0); /* options is defined in generator_popt.h */
  while ((c = poptGetNextOpt(optCon)) > 0) {}

  /* Initialise measurement points and start OML */
  oml_register_mps(); /* Defined in generator_oml.h */
  if(omlc_start()) {
    logerror("Could not start OML\n");
    return -1;
  }

  /* Inject some metadata about this application */
  OmlValueU v;
  omlc_zero(v);
  omlc_set_string(v, PACKAGE_NAME);
  omlc_inject_metadata(NULL, "appname", &v, OML_STRING_VALUE, NULL);

  omlc_set_string(v, PACKAGE_VERSION);
  omlc_inject_metadata(NULL, "version", &v, OML_STRING_VALUE, NULL);

  omlc_set_string(v, cmdline);
  omlc_inject_metadata(NULL, "cmdline", &v, OML_STRING_VALUE, NULL);
  omlc_reset_string(v);
  oml_free(cmdline);

  /* Inject measurements */
  run(g_opts, g_oml_mps_generator); /* Do some work and injections, see above */

  omlc_close();

  return 0;
}
示例#3
0
/** Reset one OmlValue, cleaning any allocated memory.
 *
 * The type of the value is also reset (to 0, i.e., OML_DOUBLE_VALUE).
 *
 * \param v pointer to OmlValue to reset
 * \return 0 if successful, -1 otherwise
 * \see oml_value_init, oml_value_array_reset, memset(3)
 */
int
oml_value_reset(OmlValue* v)
{
    switch(v->type) {
    case OML_LONG_VALUE:
        logwarn("%s(): OML_LONG_VALUE is deprecated, please use OML_INT32_VALUE instead\n", __FUNCTION__);
    case OML_INT32_VALUE:
    case OML_UINT32_VALUE:
    case OML_INT64_VALUE:
    case OML_UINT64_VALUE:
    case OML_DOUBLE_VALUE:
    case OML_GUID_VALUE:
    case OML_BOOL_VALUE:
        /* No deep cleanup needed, memset(3) below is sufficient */
        break;

    case OML_STRING_VALUE:
        omlc_reset_string(v->value);
        break;

    case OML_DATETIME_VALUE:
        omlc_reset_string(v->value);
        break;

    case OML_BLOB_VALUE:
        omlc_reset_blob(v->value);
        break;

    case OML_VECTOR_DOUBLE_VALUE:
    case OML_VECTOR_INT32_VALUE:
    case OML_VECTOR_UINT32_VALUE:
    case OML_VECTOR_INT64_VALUE:
    case OML_VECTOR_UINT64_VALUE:
    case OML_VECTOR_BOOL_VALUE:
        omlc_reset_vector(v->value);
        break;

    default:
        logwarn("%s() for type '%d' not implemented, zeroing storage\n", __FUNCTION__, v->type);
    }
    memset(v, 0, sizeof(OmlValue));
    return 0;
}
示例#4
0
文件: test_oml.c 项目: adjih/openlab
static void test_main(void *param)
{
  int8_t result = omlc_init ("Simple");
  if (result == -1) {
    printf ("Could not initialise OML\n");
    while(1);
  } else if (result == 1) {
    printf ("OML was disabled by the user, exiting\n");
    while(1);
  }
  
  OmlMPDef mp_def [] = {
    { "count", OML_UINT32_VALUE },
    { "count_str", OML_STRING_VALUE },
    { "count_real", OML_DOUBLE_VALUE },
    { NULL, (OmlValueT)0 }
  };
  
  OmlMP *mp = omlc_add_mp ("counter", mp_def);
  
  if (mp == NULL) {
    printf ("Error: could not register Measurement Point 'counter'");
    while(1);
  }
  
  omlc_start();
  
  uint32_t i = 0;
  for (i = 0; i < 100; i++) {
    uint32_t count = i;
    char count_str[16];
    double count_real = (double)i;
    OmlValueU values[3];
    
    omlc_zero_array(values, 3);
    
    snprintf(count_str, sizeof(count_str), "%d", i);
    
    omlc_set_uint32 (values[0], count);
    omlc_set_string (values[1], count_str);
    omlc_set_double (values[2], count_real);
    
    omlc_inject (mp, values);
    
    omlc_reset_string(values[1]);
  }
  omlc_close();
  while(1);
}
示例#5
0
void routing_stats::inject_into_oml(unsigned mp_index){

    OmlValueU v[13];

    omlc_zero_array(v, 13);

    omlc_set_uint32(v[0], mp_index);
    omlc_set_string(v[1], node_id.c_str());
    omlc_set_uint64(v[2], in_chunks);
    omlc_set_uint64(v[3], out_chunks);
    omlc_set_uint64(v[4], in_ctrl_msgs);
    omlc_set_uint64(v[5], out_ctrl_msgs);
    omlc_set_uint64(v[6], stored_chunks);
    omlc_set_uint64(v[7], error_chunks);
    omlc_set_uint64(v[8], dropped_chunks);
    omlc_set_uint64(v[9], in_data_bytes);
    omlc_set_uint64(v[10], out_data_bytes);
    omlc_set_uint64(v[11], in_ctrl_bytes);
    omlc_set_uint64(v[12], out_ctrl_bytes);

    omlc_inject(oml_mp, v);

    omlc_reset_string(v[1]);

#ifdef DEBUG
    char msg[500];
    sprintf(msg, "ROUTING(node: %s):\n"
        "ts i-C o-C s-C e-C d-C i-dB o-dB i-cP o-cP i-cB o-cB\n"
        "%llu %llu %llu %llu %llu %llu %llu %llu %llu %lld %llu %llu", 
        node_id.c_str(),
        t_stamp,
        in_chunks, out_chunks, 
        stored_chunks, error_chunks, dropped_chunks,
        in_data_bytes, out_data_bytes,
        in_ctrl_msgs, out_ctrl_msgs, 
        in_ctrl_bytes, out_ctrl_bytes
        );
    cout << "DEBUG: " << msg << endl;
#endif
}
示例#6
0
/** Try to convert a string to the given OmlValueT and store it an OmlValueU.
 *
 * Storage for value should have already been cleared (e.g., with
 * oml_value_set_type(), oml_value_reset() omlc_reset_string() or
 * omlc_reset_blob() if appropriate).
 *
 * Assumes the destination OmlValueU has been properly reset.
 *
 * \param value pointer to output OmlValue
 * \param type type of data to get from the string
 * \param value_s input string
 * \return  0 on success, -1 otherwise (e.g., conversion error)
 * \see oml_value_from_s, oml_value_from_typed_s
 * \see oml_value_set_type, oml_value_reset, omlc_reset_string, omlc_reset_blob
 */
static int
oml_value_ut_from_s (OmlValueU *value, OmlValueT type, const char *value_s)
{
    char *s, *eptr;
    ssize_t n;
    size_t s_sz, blob_sz, nof_elts, bytes;
    uint8_t *blob;
    oml_guid_t c;
    char *p;
    char *q;

    errno = 0; /* Not all paths manipulate errno, so make sure its value is reset */

    switch (type) {
    case OML_LONG_VALUE:
        logwarn("%s(): OML_LONG_VALUE is deprecated, please use OML_INT32_VALUE instead\n", __FUNCTION__);
        omlc_set_long (*value, strtol (value_s, NULL, 0));
        break;

    case OML_INT32_VALUE:
        omlc_set_int32 (*value, strtol (value_s, NULL, 0));
        break;
    case OML_UINT32_VALUE:
        omlc_set_uint32 (*value, strtoul (value_s, NULL, 0));
        break;
    case OML_INT64_VALUE:
        omlc_set_int64 (*value, strtoll (value_s, NULL, 0));
        break;
    case OML_UINT64_VALUE:
        omlc_set_uint64 (*value, strtoull (value_s, NULL, 0));
        break;
    case OML_DOUBLE_VALUE:  {
        omlc_set_double (*value, strtod (value_s, &eptr));
        if (eptr == value_s) {
            omlc_set_double (*value, NAN);
        }
        break;
    }
    case OML_STRING_VALUE:
        s = oml_malloc(strlen(value_s)+1);
        n = backslash_decode(value_s, s);
        omlc_reset_string(*value);
        omlc_set_string(*value, s);
        omlc_set_string_size(*value,n+1);
        break;

    case OML_DATETIME_VALUE:
        s = oml_malloc(strlen(value_s)+1);
        n = backslash_decode(value_s, s);
        omlc_reset_string(*value);
        omlc_set_string(*value, s);
        omlc_set_string_size(*value,n+1);
        break;

    case OML_BLOB_VALUE:
        omlc_reset_blob(*value);
        s_sz = base64_validate_string(value_s);
        if(s_sz != -1) {
            blob_sz = base64_size_blob(s_sz);
            blob = oml_malloc(blob_sz);
            base64_decode_string(s_sz, value_s, blob_sz, blob);
            omlc_set_blob_ptr(*value, blob);
            omlc_set_blob_length(*value, blob_sz);
            omlc_set_blob_size(*value, blob_sz);
        }
        break;

    case OML_GUID_VALUE:
        omlc_string_to_guid(value_s, &c);
        omlc_set_guid(*value, c);
        break;

    case OML_BOOL_VALUE:
        omlc_set_bool(*value, oml_value_string_to_bool(value_s));
        break;

    case OML_VECTOR_DOUBLE_VALUE:
        omlc_reset_vector(*value);
        nof_elts = strtod(value_s, &p);
        if(p - value_s) {
            size_t i, bytes;
            double *elts = oml_calloc(nof_elts, sizeof(double));
            if(elts) {
                for(i = 0; i < nof_elts; i++) {
                    elts[i] = strtod(p, &q);
                    if(q - p)
                        p = q;
                    else {
                        oml_free(elts);
                        logerror("%s(): bad [double] vector element '%s'\n", __FUNCTION__, p);
                        return -1;
                    }
                }
                bytes = nof_elts * sizeof(double);
                omlc_set_vector_ptr(*value, elts);
                omlc_set_vector_length(*value, bytes);
                omlc_set_vector_size(*value, bytes);
                omlc_set_vector_nof_elts(*value, nof_elts);
                omlc_set_vector_elt_size(*value, sizeof(double));
            } else {
                logerror("%s(): out of memory reading [double] of size %zu\n", __FUNCTION__, nof_elts);
                return -1;
            }
        } else {
            logerror("%s(): bad [double] size '%s'\n", __FUNCTION__, value_s);
            return -1;
        }
        break;

    case OML_VECTOR_INT32_VALUE:
        omlc_reset_vector(*value);
        nof_elts = strtol(value_s, &p, 0);
        if(p - value_s) {
            size_t i;
            int32_t *elts = oml_calloc(nof_elts, sizeof(int32_t));
            if(elts) {
                for(i = 0; i < nof_elts; i++) {
                    elts[i] = strtol(p, &q, 0);
                    if(q - p)
                        p = q;
                    else {
                        oml_free(elts);
                        logerror("%s(): bad [int32] vector element '%s'\n", __FUNCTION__, p);
                        return -1;
                    }
                }
                bytes = nof_elts * sizeof(int32_t);
                omlc_set_vector_ptr(*value, elts);
                omlc_set_vector_length(*value, bytes);
                omlc_set_vector_size(*value, bytes);
                omlc_set_vector_nof_elts(*value, nof_elts);
                omlc_set_vector_elt_size(*value, sizeof(int32_t));
            } else {
                logerror("%s(): out of memory reading [int32] of size %zu\n", __FUNCTION__, nof_elts);
                return -1;
            }
        } else {
            logerror("%s(): bad [int32] size '%s'\n", __FUNCTION__, value_s);
            return -1;
        }
        break;

    case OML_VECTOR_UINT32_VALUE:
        omlc_reset_vector(*value);
        nof_elts = strtoul(value_s, &p, 0);
        if(p - value_s) {
            size_t i;
            uint32_t *elts = oml_calloc(nof_elts, sizeof(uint32_t));
            if(elts) {
                for(i = 0; i < nof_elts; i++) {
                    elts[i] = strtoul(p, &q, 0);
                    if(q - p)
                        p = q;
                    else {
                        oml_free(elts);
                        logerror("%s(): bad [uint32] vector element '%s'\n", __FUNCTION__, p);
                        return -1;
                    }
                }
                bytes = nof_elts * sizeof(uint32_t);
                omlc_set_vector_ptr(*value, elts);
                omlc_set_vector_length(*value, bytes);
                omlc_set_vector_size(*value, bytes);
                omlc_set_vector_nof_elts(*value, nof_elts);
                omlc_set_vector_elt_size(*value, sizeof(uint32_t));
            } else {
                logerror("%s(): out of memory reading [uint32] of size %zu\n", __FUNCTION__, nof_elts);
                return -1;
            }
        } else {
            logerror("%s(): bad [uint32] size '%s'\n", __FUNCTION__, value_s);
            return -1;
        }
        break;

    case OML_VECTOR_INT64_VALUE:
        omlc_reset_vector(*value);
        nof_elts = strtoll(value_s, &p, 0);
        if(p - value_s) {
            size_t i;
            int64_t *elts = oml_calloc(nof_elts, sizeof(int64_t));
            if(elts) {
                for(i = 0; i < nof_elts; i++) {
                    elts[i] = strtoll(p, &q, 0);
                    if(q - p)
                        p = q;
                    else {
                        oml_free(elts);
                        logerror("%s(): bad [int64] vector element '%s'\n", __FUNCTION__, p);
                        return -1;
                    }
                }
                bytes = nof_elts * sizeof(int64_t);
                omlc_set_vector_ptr(*value, elts);
                omlc_set_vector_length(*value, bytes);
                omlc_set_vector_size(*value, bytes);
                omlc_set_vector_nof_elts(*value, nof_elts);
                omlc_set_vector_elt_size(*value, sizeof(int64_t));
            } else {
                logerror("%s(): out of memory reading [int64] of size %zu\n", __FUNCTION__, nof_elts);
                return -1;
            }
        } else {
            logerror("%s(): bad [int64] size '%s'\n", __FUNCTION__, value_s);
            return -1;
        }
        break;

    case OML_VECTOR_UINT64_VALUE:
        omlc_reset_vector(*value);
        nof_elts = strtoull(value_s, &p, 0);
        if(p - value_s) {
            size_t i;
            uint64_t *elts = oml_calloc(nof_elts, sizeof(uint64_t));
            if(elts) {
                for(i = 0; i < nof_elts; i++) {
                    elts[i] = strtoull(p, &q, 0);
                    if(q - p)
                        p = q;
                    else {
                        oml_free(elts);
                        logerror("%s(): bad [uint64] vector element '%s'\n", __FUNCTION__, p);
                        return -1;
                    }
                }
                bytes = nof_elts * sizeof(uint64_t);
                omlc_set_vector_ptr(*value, elts);
                omlc_set_vector_length(*value, bytes);
                omlc_set_vector_size(*value, bytes);
                omlc_set_vector_nof_elts(*value, nof_elts);
                omlc_set_vector_elt_size(*value, sizeof(uint64_t));
            } else {
                logerror("%s(): out of memory reading [uint64] of size %zu\n", __FUNCTION__, nof_elts);
                return -1;
            }
        } else {
            logerror("%s(): bad [uint64] size '%s'\n", __FUNCTION__, value_s);
            return -1;
        }
        break;

    case OML_VECTOR_BOOL_VALUE:
        omlc_reset_vector(*value);
        nof_elts = strtoul(value_s, &p, 0);
        if(p - value_s) {
            char *n;
            size_t i;
            bool *elts = oml_calloc(nof_elts, sizeof(bool));
            if(elts) {
                for(i = 0; i < nof_elts; i++) {
                    char *v = strtok_r(p, " ", &n);
                    if(v) {
                        elts[i] = strncasecmp(v, "false", strlen(v));
                        p = n;
                    } else {
                        oml_free(elts);
                        logerror("%s(): bad [bool] '%s'\n", __FUNCTION__, p);
                        return -1;
                    }
                }
                omlc_set_vector_bool(*value, elts, nof_elts);
                bytes = nof_elts * sizeof(bool);
                omlc_set_vector_ptr(*value, elts);
                omlc_set_vector_length(*value, bytes);
                omlc_set_vector_size(*value, bytes);
                omlc_set_vector_nof_elts(*value, nof_elts);
                omlc_set_vector_elt_size(*value, sizeof(bool));
            } else {
                logerror("%s(): out of memory reading [bool] of size %zu\n", __FUNCTION__, nof_elts);
                return -1;
            }
        } else {
            logerror("%s(): bad [bool] size '%s'\n", __FUNCTION__, value_s);
            return -1;
        }
        break;

    default:
        logerror("%s() for type '%d' not implemented to convert '%s'\n", __FUNCTION__, type, value_s);
        return -1;
    }

    if (errno == ERANGE) {
        logerror("%s(): underflow or overlow converting value from string '%s'\n", __FUNCTION__, value_s);
        return -1;
    }

    return 0;
}