The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 4;
use Test::Deep;
use Net::SPDY::Session;
use Net::SPDY::Framer;
use Socket;

use strict;
use warnings;

socketpair (S, C, AF_UNIX, SOCK_STREAM, PF_UNSPEC);

my $sess1 = fork;
die $! unless defined $sess1;

# Spawn a client
unless ($sess1) {
	close S;

	my $framer = new Net::SPDY::Framer ({
		compressor => new Net::SPDY::Compressor,
		socket => *C,
	});

	$framer->write_frame (
		type	=> Net::SPDY::Framer::SETTINGS,
		id_values => [{
			flags	=> 0x0,
			value	=> 1000,
			id	=> Net::SPDY::Framer::SETTINGS_MAX_CONCURRENT_STREAMS,
		}, {
			flags	=> Net::SPDY::Framer::FLAG_SETTINGS_PERSIST_VALUE,
			value	=> 666,
			id	=> Net::SPDY::Framer::SETTINGS_DOWNLOAD_BANDWIDTH,
		}],
	);

	$framer->write_frame (
		type	=> Net::SPDY::Framer::SETTINGS,
		id_values => [{
			flags	=> 0x0,
			value	=> 8086,
			id	=> Net::SPDY::Framer::SETTINGS_DOWNLOAD_BANDWIDTH,
		}, {
			flags	=> Net::SPDY::Framer::FLAG_SETTINGS_PERSIST_VALUE,
			value	=> 1337,
			id	=> Net::SPDY::Framer::SETTINGS_UPLOAD_BANDWIDTH,
		}, {
			flags	=> 0x0,
			value	=> 1024,
			id	=> Net::SPDY::Framer::SETTINGS_UPLOAD_BANDWIDTH,
		}],
	);

	$framer->write_frame (
		type	=> Net::SPDY::Framer::SETTINGS,
		flags	=> Net::SPDY::Framer::FLAG_SETTINGS_CLEAR_SETTINGS,
		id_values => [{
			flags	=> 0x0,
			value	=> 1024,
			id	=> Net::SPDY::Framer::SETTINGS_UPLOAD_BANDWIDTH,
		}],
	);

	exit 0;
}
close C;

my $session = new Net::SPDY::Session (*S);
ok ($session, 'Created a session instance');

$session->process_frame;
cmp_deeply ($session->{settings}, {
	Net::SPDY::Framer::SETTINGS_MAX_CONCURRENT_STREAMS
		=> [ 1000, 0x0 ],
	Net::SPDY::Framer::SETTINGS_DOWNLOAD_BANDWIDTH
		=> [ 666, Net::SPDY::Framer::FLAG_SETTINGS_PERSIST_VALUE ],
}, 'Got initial SETTINGS');


$session->process_frame;
cmp_deeply ($session->{settings}, {
	Net::SPDY::Framer::SETTINGS_MAX_CONCURRENT_STREAMS
		=> [ 1000, 0x0 ],
	Net::SPDY::Framer::SETTINGS_DOWNLOAD_BANDWIDTH
		=> [ 8086, 0x0 ],
	Net::SPDY::Framer::SETTINGS_UPLOAD_BANDWIDTH,
		=> [ 1337, Net::SPDY::Framer::FLAG_SETTINGS_PERSIST_VALUE ],
}, 'Processed more SETTINGS');

$session->process_frame;
cmp_deeply ($session->{settings}, {
	Net::SPDY::Framer::SETTINGS_UPLOAD_BANDWIDTH,
		=> [ 1024, 0x0 ],
}, 'Overrode SETTINGS');

close S;
kill $sess1;
waitpid $sess1, 0;