[thin_rmap] region parsing

This commit is contained in:
Joe Thornber 2013-05-23 13:57:57 +01:00
parent 5498e0bc46
commit 25a090279f
3 changed files with 88 additions and 1 deletions

View File

@ -24,3 +24,7 @@ When(/^I run thin_check with (.*?)$/) do |opts|
run_simple("thin_check #{opts} #{dev_file}", false) run_simple("thin_check #{opts} #{dev_file}", false)
end end
When(/^I run thin_rmap with (.*?)$/) do |opts|
run_simple("thin_rmap #{opts} #{dev_file}", false)
end

View File

@ -47,3 +47,63 @@ Feature: thin_rmap
Scenario: Unrecognised option should cause failure Scenario: Unrecognised option should cause failure
When I run `thin_rmap --unleash-the-hedeghogs` When I run `thin_rmap --unleash-the-hedeghogs`
Then it should fail Then it should fail
Scenario: Valid region format should pass
Given valid metadata
When I run thin_rmap with --region 23..7890
Then it should pass
Scenario: Invalid region format should fail (comma instean of dots)
Given valid metadata
When I run thin_rmap with --region 23,7890
Then it should fail
Scenario: Invalid region format should fail (second number a word)
Given valid metadata
When I run thin_rmap with --region 23..six
Then it should fail
Scenario: Invalid region format should fail (first number a word)
Given valid metadata
When I run thin_rmap with --region four..7890
Then it should fail
Scenario: Invalid region format should fail (end is lower than begin)
Given valid metadata
When I run thin_rmap with --region 89..88
Then it should fail
Scenario: Invalid region format should fail (end is equal to begin)
Given valid metadata
When I run thin_rmap with --region 89..89
Then it should fail
Scenario: Invalid region format should fail (no begin)
Given valid metadata
When I run thin_rmap with --region ..89
Then it should fail
Scenario: Invalid region format should fail (no end)
Given valid metadata
When I run thin_rmap with --region 89..
Then it should fail
Scenario: Invalid region format should fail (no region at all)
Given valid metadata
When I run thin_rmap with --region
Then it should fail
Scenario: Invalid region format should fail (three dots)
Given valid metadata
When I run thin_rmap with --region 89...99
Then it should fail
Scenario: Multiple regions should pass
Given valid metadata
When I run thin_rmap with --region 1..23 --region 45..78
Then it should pass

View File

@ -1,6 +1,7 @@
#include <iostream> #include <iostream>
#include <getopt.h> #include <getopt.h>
#include <libgen.h> #include <libgen.h>
#include <sstream>
#include <vector> #include <vector>
#include "version.h" #include "version.h"
@ -19,9 +20,30 @@ namespace {
int rmap(string const &path, vector<region> const &regions) { int rmap(string const &path, vector<region> const &regions) {
cerr << "Not implemented" << endl; cerr << "Not implemented" << endl;
return 1; return 0;
} }
region parse_region(string const &str) {
istringstream in(str);
char dots[2] = {'\0', '\0'};
block_address begin, end;
in >> begin;
in.read(dots, sizeof(dots));
if (dots[0] != '.' || dots[1] != '.')
throw runtime_error("badly formed region (no dots)");
in >> end;
if (in.fail())
throw runtime_error("badly formed region (couldn't parse numbers)");
if (end <= begin)
throw runtime_error("badly formed region (end <= begin)");
return region(begin, end);
};
void usage(ostream &out, string const &cmd) { void usage(ostream &out, string const &cmd) {
out << "Usage: " << cmd << " [options] {device|file}" << endl out << "Usage: " << cmd << " [options] {device|file}" << endl
<< "Options:" << endl << "Options:" << endl
@ -60,6 +82,7 @@ int main(int argc, char **argv)
case 1: case 1:
// region // region
regions.push_back(parse_region(optarg));
break; break;
default: default: