package Test::Smoke::Fact::Node;

use strict;
use warnings;

use base "Metabase::Fact::Hash";

our $VERSION = "0.011";

sub required_keys
{
    qw( hostname
	architecture
	osname
	osversion
	cc
	ccversion
	);
    } # required_keys

sub optional_keys
{
    qw( cpu_count
	cpu_description
	user
	);
    } # optional_keys

sub validate_content
{
    my $self = shift;

    my $content = $self->content;
    $self->SUPER::validate_content;
    } # validate_content

sub content_metadata
{
    my $self = shift;
    my $content = $self->content;

    return { map { $_ => $content->{$_} }
	$self->required_keys, $self->optional_keys };
    } # content_metadata

sub content_metadata_types
{
    my $self = shift;

    return { map { $_ => "//str" }
	$self->required_keys, $self->optional_keys };
    } # content_metadata_types

1;

__END__

=head1 NAME

Test::Smoke::Fact::SmokeID - The run environment for a Test::Smoke report

=head1 SYNOPSIS

  my $fact = Test::Smoke::Fact::SmokeID->new (
      resource => "http://perl5.git.perl.org/perl.git/8c576062",
      content  => {
          hostname        => "smokebox",
          architecture    => "ia64",
          osname          => "HP-UX",
          osversion       => "B.11.31/64",
          cpu_count       => 2,
          cpu_description => "Itanium 2 9100/1710",
          cc              => "cc",
          ccversion       => "B3910B",
          user            => "tux",
          },
      );

=head1 DESCRIPTION

These facts identify a smoke. With this ID, one should be able to
find all other facts that belong to a single smoke run.

=over 4

=item hostname

This item describes the host name of the machine on which the smoke runs.

 e.g. "smokebox"

=item architecture

This item describes, as completely as possible, the architecture of the
system on which the smoke runs.

 e.g. "ia64"

This information is an aggregation of what Test::Smoke was able to gather,
in above example, a PA-RISC 2.0 64bit architecture with 2 CPU's. The format
of this information in not normalized across architectures, it just joins
all information found.

=item osname

This item describes the Operating system name, which is not guaranteed to
be the same as C<$^O>.

 e.g. "HP-UX"

=item osversion

This item describes the operating system version.

 e.g. "B.11.31/64"

=item cc

This item describes the name of the C-compiler used for this smoke. It
does not tell anything about the identity of the compiler.

 e.g. "cc"

=item ccversion

This item describes the version of the C-compiler

 e.g. "B3910B"

=item cpu_count

This optional item describes the number of CPU's that were found for
this smoke. It does not tell how many were actually used.

 e.g. 2

=item cpu_description

This optional item describes the CPU(s) that were found for this smoke.

 e.g. "Intel(R) Core(TM) i5 CPU M 540 @ 2.53GHz (GenuineIntel 1199MHz)"

=item user

This optional item describes the name of the I<user> who ran the smoke.

 e.g. "tux"

=item smoke_id

This item should be a MD5 hash of the above items, but it is possible to
pass one. Unless one is passed, it is automatically generated.

=back

=head1 SEE ALSO

L<Test::Smoke>, L<Test::Smoke::Metabase>, L<Metabase::Fact>.
L<Metabase::Fact::Hash>.

=head1 AUTHOR

H.Merijn Brand

=head1 COPYRIGHT AND LICENSE

Copyright (c) 2010-2011 by H.Merijn Brand

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut