#include <stdio.h>
#include <errno.h>
#include <strings.h>
#include <err.h>
#include <libsff.h>
#include "sff.h"
typedef struct {
uint8_t lss_bytes[16];
const char *lss_parsed;
} lsfs_string_pair_t;
static const lsfs_string_pair_t lsfs_bad_vals[] = {
{ { '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
'\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0' },
"" },
{ { 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a',
'\0', 'a', 'a', 'a', 'a', 'a', 'a', 'a' },
"" },
{ { 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a',
156, 'a', 'a', 'a', 'a', 'a', 'a', 'a' },
"" },
{ { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' },
"" }
};
#define NBAD (sizeof (lsfs_bad_vals) / sizeof (lsfs_string_pair_t))
static const lsfs_string_pair_t lsfs_good_vals[] = {
{ { 'f', 'i', 'n', 'g', 'o', 'l', 'f', 'i',
'n', ' ', ' ', ' ', ' ', ' ', ' ', ' ' },
"fingolfin" },
{ { 'G', 'l', 'o', 'b', 'e', 'x', ' ', 'C',
'o', 'r', 'p', ' ', ' ', ' ', ' ', ' ' },
"Globex Corp" },
{ { '~', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' },
"~" },
{ { '!', '!', '!', '!', '!', '!', '!', '!',
'!', '!', '!', '!', '!', '!', '!', '!' },
"!!!!!!!!!!!!!!!!" }
};
#define NGOOD (sizeof (lsfs_good_vals) / sizeof (lsfs_string_pair_t))
int
main(void)
{
int ret, i;
uint8_t buf[256];
nvlist_t *nvl;
char *val;
for (i = 0; i < NBAD; i++) {
bzero(buf, sizeof (buf));
bcopy(lsfs_bad_vals[i].lss_bytes, &buf[SFF_8472_VENDOR],
SFF_8472_VENDOR_LEN);
if ((ret = libsff_parse(buf, sizeof (buf), 0xa0, &nvl)) != 0) {
errx(1, "TEST FAILED: failed to parse SFP bad string "
"case %d: %s\n", i, strerror(ret));
}
if ((ret = nvlist_lookup_string(nvl, LIBSFF_KEY_VENDOR,
&val)) != ENOENT) {
errx(1, "TEST FALIED: found unexpected return value "
"for %s: %d\n", LIBSFF_KEY_VENDOR, ret);
}
nvlist_free(nvl);
}
for (i = 0; i < NGOOD; i++) {
bzero(buf, sizeof (buf));
bcopy(lsfs_good_vals[i].lss_bytes, &buf[SFF_8472_VENDOR],
SFF_8472_VENDOR_LEN);
if ((ret = libsff_parse(buf, sizeof (buf), 0xa0, &nvl)) != 0) {
errx(1, "TEST FAILED: failed to parse SFP good string "
"case %d: %s\n", i, strerror(ret));
}
if ((ret = nvlist_lookup_string(nvl, LIBSFF_KEY_VENDOR,
&val)) != 0) {
errx(1, "TEST FALIED: failed to find expected key "
"%s: %d", LIBSFF_KEY_VENDOR, ret);
}
if (strcmp(val, lsfs_good_vals[i].lss_parsed) != 0) {
errx(1, "TEST FAILED: expected string %s, found %s\n",
lsfs_good_vals[i].lss_parsed, val);
}
nvlist_free(nvl);
}
return (0);
}