Index: /trunk/DataStore/lib/DataStore/FileSet.pm
===================================================================
--- /trunk/DataStore/lib/DataStore/FileSet.pm	(revision 6586)
+++ /trunk/DataStore/lib/DataStore/FileSet.pm	(revision 6587)
@@ -1,5 +1,5 @@
 # Copyright (C) 2006  Joshua Hoblitt
 #
-# $Id: FileSet.pm,v 1.2 2006-03-08 00:22:51 jhoblitt Exp $
+# $Id: FileSet.pm,v 1.3 2006-03-15 03:18:25 jhoblitt Exp $
 
 package DataStore::FileSet;
@@ -13,4 +13,8 @@
 use base qw( DataStore::Record );
 
+use Carp qw( carp );
+use DataStore::File::Parser;
+use DataStore::Response;
+use LWP::UserAgent;
 use Params::Validate qw( validate SCALAR );
 
@@ -81,4 +85,52 @@
 }
 
+=back
+
+=head3 Object Methods
+
+=over 4
+
+=item * C<request()>
+
+=cut
+
+sub request 
+{
+    my $self = shift;
+
+    # no params
+    validate(@_, {});
+
+    # make request
+    my $ua = LWP::UserAgent->new;
+    my $request = HTTP::Request->new(GET => $self->uri);
+    my $response = $ua->request($request);
+
+    if (! $response->is_success) {
+        carp $response->status_line;
+        return undef;
+    }
+
+    # parse document
+    my $parser = DataStore::File::Parser->new;
+
+    my $data = $parser->parse($response->content);
+
+    unless ($data) {
+        carp "Product contains no FileSets";
+        return undef;
+    }
+
+
+    # return DS::Response object
+    my $dsr = DataStore::Response->new(
+        is_success  => 1,
+        code        => $response->code,
+        status_line => $response->status_line,
+        data        => $data,
+        request     => $self,
+    );
+}
+
 1;
 
Index: /trunk/DataStore/t/06_fileset.t
===================================================================
--- /trunk/DataStore/t/06_fileset.t	(revision 6586)
+++ /trunk/DataStore/t/06_fileset.t	(revision 6587)
@@ -3,5 +3,5 @@
 # Copyright (C) 2006  Joshua Hoblitt
 #
-# $Id: 06_fileset.t,v 1.1 2006-03-08 00:23:09 jhoblitt Exp $
+# $Id: 06_fileset.t,v 1.2 2006-03-15 03:18:25 jhoblitt Exp $
 
 use strict;
@@ -10,5 +10,5 @@
 use lib qw( ./lib ./t );
 
-use Test::More tests => 6;
+use Test::More tests => 17;
 
 =head1 NAME
@@ -74,2 +74,79 @@
 # ->request()
 
+use Net::HTTPServer;
+
+sub bar 
+{
+    my $req = shift;             # Net::HTTPServer::Request object
+    my $res = $req->Response();  # Net::HTTPServer::Response object
+
+    my $string = <<END;
+# fileID      |bytes   |md5sum                          |type|chipname|
+otis0123456.01|83002312|fe6a2b6564c0d4cfb3bbf1db813824ba|chip|ota01   |
+otis0123456.02|83002312|a2b4a7d7b94dc6076c5f3f67239a48c6|chip|ota02   |
+otis0123456.03|83002312|a39b1510484c7833e27454b181f13981|chip|ota03   |
+otis0123456.04|83002312|7bb35e1e30f3f833c0416aea75f90304|chip|ota04   |
+END
+
+    $res->Print($string);
+
+    return $res;
+}
+
+$|++;
+
+$SIG{CHLD} = 'IGNORE';
+my $pid = open(my $child, "-|");
+
+unless ($pid) {
+    my $server = new Net::HTTPServer( port => 'scan' );
+
+    # send port number to parent
+    print $server->Start(), "\n";
+
+    $server->RegisterURL('/', \&bar);
+    $server->Process();  # Run forever
+
+    exit -1;
+}
+
+my $port = <$child>;
+chomp $port;
+
+{
+    my $dsp = DataStore::FileSet->new(
+        uri         => "http://localhost:$port/",
+        fileset     => '12buckelyourshoe',
+        datetime    => '2042-01-01T00:00:00Z',
+        type        => 'foo',
+    );
+
+    isa_ok($dsp->request, 'DataStore::Response');
+}
+
+{
+    my $dsp = DataStore::FileSet->new(
+        uri         => "http://localhost:$port/",
+        fileset     => '12buckelyourshoe',
+        datetime    => '2042-01-01T00:00:00Z',
+        type        => 'foo',
+    );
+
+    my $dsr = $dsp->request;
+
+    ok($dsr->is_success, "response->is_success() is correct");
+    is($dsr->code, 200, "response->code() is correct");
+    is($dsr->status_line, "200 OK", "response->status_line() is correct");
+    is(ref $dsr->data, 'ARRAY', "response->data is arrayref is correct");
+    isa_ok($dsr->request, 'DataStore::Record');
+
+    my $data = $dsr->data;
+    is(scalar @$data, 4, "data has the correct number of rows");
+    isa_ok(@$data[0], 'DataStore::File', "data has correct type of rows");
+    isa_ok(@$data[1], 'DataStore::File', "data has correct type of rows");
+    isa_ok(@$data[2], 'DataStore::File', "data has correct type of rows");
+    isa_ok(@$data[3], 'DataStore::File', "data has correct type of rows");
+}
+
+# cleanup HTTP server
+kill 9, $pid;
