def test_file_not_found(self): tftp = TFTP(BackendFactory(FileNotFound("Not found")), _clock=self.clock) tftp.transport = self.transport rrq_datagram = RRQDatagram('foobar', 'netascii', {}) tftp.datagramReceived(rrq_datagram.to_wire(), ('127.0.0.1', 1111)) error_datagram = TFTPDatagramFactory(*split_opcode(self.transport.value())) self.assertEqual(error_datagram.errorcode, ERR_FILE_NOT_FOUND)
def test_file_not_found(self): tftp = TFTP(BackendFactory(FileNotFound("Not found")), _clock=self.clock) tftp.transport = self.transport rrq_datagram = RRQDatagram(b'foobar', b'netascii', {}) tftp.datagramReceived(rrq_datagram.to_wire(), ('127.0.0.1', 1111)) self.clock.advance(1) error_datagram = TFTPDatagramFactory( *split_opcode(self.transport.value())) self.assertEqual(error_datagram.errorcode, ERR_FILE_NOT_FOUND)
def test_access_violation(self): tftp = TFTP(BackendFactory(AccessViolation("No!")), _clock=self.clock) tftp.transport = self.transport wrq_datagram = WRQDatagram('foobar', 'netascii', {}) tftp.datagramReceived(wrq_datagram.to_wire(), ('127.0.0.1', 1111)) error_datagram = TFTPDatagramFactory(*split_opcode(self.transport.value())) self.assertEqual(error_datagram.errorcode, ERR_ACCESS_VIOLATION) self.transport.clear() rrq_datagram = RRQDatagram('foobar', 'octet', {}) tftp.datagramReceived(rrq_datagram.to_wire(), ('127.0.0.1', 1111)) error_datagram = TFTPDatagramFactory(*split_opcode(self.transport.value())) self.assertEqual(error_datagram.errorcode, ERR_ACCESS_VIOLATION)
def test_unsupported(self): tftp = TFTP(BackendFactory(Unsupported("I don't support you")), _clock=self.clock) tftp.transport = self.transport wrq_datagram = WRQDatagram('foobar', 'netascii', {}) tftp.datagramReceived(wrq_datagram.to_wire(), ('127.0.0.1', 1111)) error_datagram = TFTPDatagramFactory(*split_opcode(self.transport.value())) self.assertEqual(error_datagram.errorcode, ERR_ILLEGAL_OP) self.transport.clear() rrq_datagram = RRQDatagram('foobar', 'octet', {}) tftp.datagramReceived(rrq_datagram.to_wire(), ('127.0.0.1', 1111)) error_datagram = TFTPDatagramFactory(*split_opcode(self.transport.value())) self.assertEqual(error_datagram.errorcode, ERR_ILLEGAL_OP)
def test_generic_backend_error(self): tftp = TFTP(BackendFactory(BackendError("A backend that couldn't")), _clock=self.clock) tftp.transport = self.transport rrq_datagram = RRQDatagram('foobar', 'netascii', {}) tftp.datagramReceived(rrq_datagram.to_wire(), ('127.0.0.1', 1111)) error_datagram = TFTPDatagramFactory(*split_opcode(self.transport.value())) self.assertEqual(error_datagram.errorcode, ERR_NOT_DEFINED) self.transport.clear() rrq_datagram = RRQDatagram('foobar', 'octet', {}) tftp.datagramReceived(rrq_datagram.to_wire(), ('127.0.0.1', 1111)) error_datagram = TFTPDatagramFactory(*split_opcode(self.transport.value())) self.assertEqual(error_datagram.errorcode, ERR_NOT_DEFINED)
def test_access_violation(self): tftp = TFTP(BackendFactory(AccessViolation("No!")), _clock=self.clock) tftp.transport = self.transport wrq_datagram = WRQDatagram(b'foobar', b'netascii', {}) tftp.datagramReceived(wrq_datagram.to_wire(), ('127.0.0.1', 1111)) self.clock.advance(1) error_datagram = TFTPDatagramFactory( *split_opcode(self.transport.value())) self.assertEqual(error_datagram.errorcode, ERR_ACCESS_VIOLATION) self.transport.clear() rrq_datagram = RRQDatagram(b'foobar', b'octet', {}) tftp.datagramReceived(rrq_datagram.to_wire(), ('127.0.0.1', 1111)) self.clock.advance(1) error_datagram = TFTPDatagramFactory( *split_opcode(self.transport.value())) self.assertEqual(error_datagram.errorcode, ERR_ACCESS_VIOLATION)
def test_unsupported(self): tftp = TFTP(BackendFactory(Unsupported("I don't support you")), _clock=self.clock) tftp.transport = self.transport wrq_datagram = WRQDatagram(b'foobar', b'netascii', {}) tftp.datagramReceived(wrq_datagram.to_wire(), ('127.0.0.1', 1111)) self.clock.advance(1) error_datagram = TFTPDatagramFactory( *split_opcode(self.transport.value())) self.assertEqual(error_datagram.errorcode, ERR_ILLEGAL_OP) self.transport.clear() rrq_datagram = RRQDatagram(b'foobar', b'octet', {}) tftp.datagramReceived(rrq_datagram.to_wire(), ('127.0.0.1', 1111)) self.clock.advance(1) error_datagram = TFTPDatagramFactory( *split_opcode(self.transport.value())) self.assertEqual(error_datagram.errorcode, ERR_ILLEGAL_OP)
def test_get_reader_defers(self): rrq_datagram = RRQDatagram(b'nonempty', b'NetASCiI', {}) rrq_addr = ('127.0.0.1', 1069) rrq_mode = b"octet" d = self.tftp._startSession(rrq_datagram, rrq_addr, rrq_mode) self.assertFalse(d.called) self.clock.advance(1) self.assertTrue(d.called) self.assertTrue(IReader.providedBy(d.result.backend))
def test_context_rrq(self): rrq_datagram = RRQDatagram(b'nonempty', b'NetASCiI', {}) rrq_addr = ('127.0.0.1', 1069) error = yield self.assertFailure( self.tftp._startSession(rrq_datagram, rrq_addr, b"octet"), CapturedContext) self.assertEqual(("get_reader", rrq_datagram.filename), error.args) self.assertEqual( { "local": self.tftp.transport.host, "remote": rrq_addr }, error.context)
def test_RRQ(self): self.client.transport.write( RRQDatagram(b'nonempty', b'NetASCiI', {}).to_wire(), ('127.0.0.1', 1069)) d = Deferred() def cb(ign): self.assertIsInstance(self.tftp.session, RemoteOriginReadSession) self.assertIsInstance(self.tftp.session.backend, NetasciiSenderProxy) self.tftp.session.cancel() d.addCallback(cb) reactor.callLater(0.5, d.callback, None) return d
def test_generic_backend_error(self): tftp = TFTP(BackendFactory(BackendError("A backend that couldn't")), _clock=self.clock) tftp.transport = self.transport rrq_datagram = RRQDatagram(b'foobar', b'netascii', {}) tftp.datagramReceived(rrq_datagram.to_wire(), ('127.0.0.1', 1111)) self.clock.advance(1) error_datagram = TFTPDatagramFactory( *split_opcode(self.transport.value())) self.assertEqual(error_datagram.errorcode, ERR_NOT_DEFINED) self.transport.clear() rrq_datagram = RRQDatagram(b'foobar', b'octet', {}) tftp.datagramReceived(rrq_datagram.to_wire(), ('127.0.0.1', 1111)) self.clock.advance(1) error_datagram = TFTPDatagramFactory( *split_opcode(self.transport.value())) self.assertEqual(error_datagram.errorcode, ERR_NOT_DEFINED)