blob: acbc07d63c94c25606664ebc850c01677a48e73b [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
#include <exception>
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include "qpid/Options.h"
namespace qpid {
namespace tests {
struct Args : public qpid::Options
{
uint count;
uint minSize;
uint maxSize;
uint minChar;
uint maxChar;
bool help;
Args() : qpid::Options("Random data generator"),
count(1), minSize(8), maxSize(4096),
minChar(32), maxChar(126),//safely printable ascii chars
help(false)
{
addOptions()
("count", qpid::optValue(count, "N"), "number of data strings to generate")
("min-size", qpid::optValue(minSize, "N"), "minimum size of data string")
("max-size", qpid::optValue(maxSize, "N"), "maximum size of data string")
("min-char", qpid::optValue(minChar, "N"), "minimum char value used in data string")
("max-char", qpid::optValue(maxChar, "N"), "maximum char value used in data string")
("help", qpid::optValue(help), "print this usage statement");
}
bool parse(int argc, char** argv) {
try {
qpid::Options::parse(argc, argv);
if (maxSize < minSize) throw qpid::Options::Exception("max-size must be greater than min-size");
if (maxChar < minChar) throw qpid::Options::Exception("max-char must be greater than min-char");
if (help) {
std::cerr << *this << std::endl << std::endl;
} else {
return true;
}
} catch (const std::exception& e) {
std::cerr << *this << std::endl << std::endl << e.what() << std::endl;
}
return false;
}
};
uint random(uint min, uint max)
{
return (rand() % (max-min+1)) + min;
}
std::string generateData(uint size, uint min, uint max)
{
std::string data;
for (uint i = 0; i < size; i++) {
data += (char) random(min, max);
}
return data;
}
}} // namespace qpid::tests
using namespace qpid::tests;
int main(int argc, char** argv)
{
Args opts;
if (opts.parse(argc, argv)) {
srand(time(0));
for (uint i = 0; i < opts.count; i++) {
std::cout << generateData(random(opts.minSize, opts.maxSize), opts.minChar, opts.maxChar) << std::endl;
}
return 0;
} else {
return 1;
}
}