The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# load and dump ospf lsdb via yaml string interface

use strict;
use warnings;
use File::Temp;
use Test::More tests => 1;

use OSPF::LSDB::YAML;

my %tmpargs = (
    SUFFIX => ".yaml",
    TEMPLATE => "ospfview-yaml-string-XXXXXXXXXX",
    TMPDIR => 1,
    UNLINK => 1,
);

my $string = <<EOF;
--- 
database: 
  boundarys: []

  externals: []

  intranetworks: []

  intrarouters: []

  links: []

  networks: 
    - 
      address: 0.0.1.1
      area: 1.0.0.0
      attachments: 
        - 
          routerid: 0.1.0.0
      netmask: 255.255.255.0
      routerid: 0.1.0.0
    - 
      address: 0.0.1.2
      area: 1.0.0.0
      attachments: 
        - 
          routerid: 0.1.0.0
      netmask: 255.255.255.128
      routerid: 0.1.0.0
    - 
      address: 0.0.2.1
      area: 2.0.0.0
      attachments: 
        - 
          routerid: 0.1.0.0
      netmask: 255.255.255.0
      routerid: 0.1.0.0
  routers: 
    - 
      area: 1.0.0.0
      bits: 
        B: 1
        E: 1
        V: 0
      pointtopoints: []

      router: 0.1.0.0
      routerid: 0.1.0.0
      stubs: []

      transits: []

      virtuals: []

    - 
      area: 2.0.0.0
      bits: 
        B: 1
        E: 1
        V: 0
      pointtopoints: []

      router: 0.1.0.0
      routerid: 0.1.0.0
      stubs: []

      transits: []

      virtuals: []

  summarys: []

ipv6: 0
self: 
  areas: 
    - 1.0.0.0
    - 2.0.0.0
  routerid: 0.1.0.0
version: '$OSPF::LSDB::VERSION'
EOF

my $yaml = OSPF::LSDB::YAML->new();
$yaml->Load($string);
my $dump = $yaml->Dump();
is($dump, $string, "load string and dump string must be identical") or do {
    my $s = File::Temp->new(%tmpargs);
    print $s $string;
    my $d = File::Temp->new(%tmpargs);
    print $d $dump;
    system('diff', '-up', $s->filename, $d->filename);
};