<!doctype html>
<meta charset=utf-8>
<title>RTCIceTransport</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="RTCPeerConnection-helper.js"></script>
<script>
'use strict';

promise_test(async t => {
  const pc1 = new RTCPeerConnection();
  t.add_cleanup(() => pc1.close());
  const pc2 = new RTCPeerConnection();
  t.add_cleanup(() => pc2.close());
  pc1.createDataChannel('');
  assert_equals(null, pc1.sctp);
  assert_equals(null, pc2.sctp);
  const offer = await pc1.createOffer();
  await pc1.setLocalDescription(offer);
  assert_not_equals(null, pc1.sctp);
  await pc2.setRemoteDescription(offer);
  assert_not_equals(null, pc2.sctp);
  const answer = await pc2.createAnswer();
  await pc2.setLocalDescription(answer);
  await pc1.setRemoteDescription(answer);
  // Since this test does not exchange candidates, state remains "connecting".
  assert_equals(pc1.sctp.state, "connecting");
  assert_equals(pc2.sctp.state, "connecting");
}, 'SctpTransport objects are created at appropriate times');

promise_test(async t => {
  const pc1 = new RTCPeerConnection();
  t.add_cleanup(() => pc1.close());
  const pc2 = new RTCPeerConnection();
  t.add_cleanup(() => pc2.close());
  exchangeIceCandidates(pc1, pc2);
  pc1.createDataChannel('');
  const offer = await pc1.createOffer();
  await pc1.setLocalDescription(offer);
  const pc1ConnectedWaiter = waitForState(pc1.sctp, 'connected');
  await pc2.setRemoteDescription(offer);
  const pc2ConnectedWaiter = waitForState(pc2.sctp, 'connected');
  const answer = await pc2.createAnswer();
  await pc2.setLocalDescription(answer);
  await pc1.setRemoteDescription(answer);
  await pc1ConnectedWaiter;
  await pc2ConnectedWaiter;
  const pc1ClosedWaiter = waitForState(pc1.sctp, 'closed');
  const pc2ClosedWaiter = waitForState(pc2.sctp, 'closed');
  pc1.close();
  await pc1ClosedWaiter;
  await pc2ClosedWaiter;
}, 'SctpTransport reaches connected and closed state');

</script>
