#!/usr/bin/python
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import socket

from fake_printer import FakePrinter


def main():
    """
    Unit tests for fake_printer.py.

    """
    # Simple unit test - it should start and stop without errors
    p = FakePrinter(12345)
    p.stop()

    # The same test but other way
    with FakePrinter(23456) as p:
        pass

    # Another test - let's try to send something
    message = 'lkds;fsdjfsdjflsdjfsd;lfsad;adfsfa324dsfcxvdsvdf'
    port = 12345
    with FakePrinter(port) as printer:
        # Opens a socket and sends the message
        my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        my_socket.connect( ('localhost', port) )
        my_socket.send(message)
        my_socket.close()
        # Reads the message from the FakePrinter
        doc = printer.fetch_document(10)
        # The printer is stopped at the end of "with" statement
    assert message == doc


if __name__ == '__main__':
    main()
