mirror of
https://github.com/bobbimanners/emailler.git
synced 2025-03-03 07:29:58 +00:00
git-svn-id: http://svn.code.sf.net/p/netboot65/code@41 93682198-c243-4bdb-bd91-e943c89aac3b
This commit is contained in:
parent
6eb041bd53
commit
b6645f9eea
@ -302,7 +302,7 @@ CATALOG OFFSET: $#{"%04x" % catalog_offset}"
|
||||
attr_reader :track_no,:sector_no,:sector_length,:volume_name
|
||||
OPCODE=0x02
|
||||
def initialize(args={})
|
||||
args[:opcode]=OPCODE
|
||||
args[:opcode]=OPCODE
|
||||
[:track_no,:sector_no,:sector_length,:volume_name].each do |arg|
|
||||
raise "#{arg} must be specified in a #{self.class}" if args[arg].nil?
|
||||
end
|
||||
@ -359,6 +359,24 @@ SECTOR LENGTH: $#{"%04x" % sector_length}"
|
||||
end
|
||||
end
|
||||
|
||||
class SectorWriteRequestMessage < SectorReadResponseMessage
|
||||
OPCODE=0x03
|
||||
def initialize(args={})
|
||||
super(args)
|
||||
@opcode=OPCODE
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
class SectorWriteResponseMessage < SectorReadRequestMessage
|
||||
OPCODE=0x83
|
||||
def initialize(args={})
|
||||
super(args)
|
||||
@opcode=OPCODE
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
class CreateVolumeRequestMessage < BaseMessage
|
||||
attr_reader :system_architecture,:volume_name,:track_count,:sector_length
|
||||
OPCODE=0x04
|
||||
|
@ -83,6 +83,34 @@ class TNDPServer
|
||||
end
|
||||
end
|
||||
end
|
||||
when TNDP::SectorWriteRequestMessage::OPCODE
|
||||
file_system_image=nil
|
||||
begin
|
||||
file_system_image_path="#{@root_directory}/#{request.volume_name}"
|
||||
file_system_image=RipXplore.best_fit_from_filename(file_system_image_path)
|
||||
rescue Exception=>e
|
||||
response=TNDP::ErrorResponseMessage.create_error_response(data,TNDP::ErrorCodes::INVALID_VOLUME_NAME,e.to_s)
|
||||
end
|
||||
if !(file_system_image.nil?) then
|
||||
track_no=request.track_no
|
||||
sector_no=request.sector_no
|
||||
sector_length=request.sector_length
|
||||
sector_data=request.sector_data
|
||||
if (track_no<file_system_image.start_track) || (track_no>file_system_image.end_track) then
|
||||
response=TNDP::ErrorResponseMessage.create_error_response(data,TNDP::ErrorCodes::INVALID_TRACK_NUMBER,"requested track $#{"%X"% track_no} outside allowable range of $#{"%X"% file_system_image.start_track}..$#{"%X"% file_system_image.end_track}")
|
||||
else
|
||||
existing_sector_data=file_system_image.get_sector(track_no,sector_no)
|
||||
if existing_sector_data.nil? then
|
||||
response=TNDP::ErrorResponseMessage.create_error_response(data,TNDP::ErrorCodes::INVALID_SECTOR_NUMBER,"requested sector $#{"%X"% sector_no} not found in track $#{"%X"% track_no}")
|
||||
elsif (existing_sector_data.length)!=sector_length then
|
||||
response=TNDP::ErrorResponseMessage.create_error_response(data,TNDP::ErrorCodes::INVALID_SECTOR_LENGTH,"requested track $#{"%X"% track_no}/sector $#{"%X"% sector_no} is of length $#{"%X"% sector_data.length}, not $#{"%X"% sector_length}")
|
||||
else
|
||||
file_system_image.set_sector(track_no,sector_no,sector_data)
|
||||
file_system_image.save_as(file_system_image_path)
|
||||
response=TNDP::SectorWriteResponseMessage.new({:track_no=>track_no,:sector_no=>sector_no,:sector_length=>sector_length,:volume_name=>request.volume_name})
|
||||
end
|
||||
end
|
||||
end
|
||||
when TNDP::CreateVolumeRequestMessage::OPCODE
|
||||
volume_file="#{@root_directory}/#{request.volume_name}"
|
||||
volume_creation_paramaters=VOLUME_CREATION_PARAMATERS[request.system_architecture]
|
||||
|
@ -44,18 +44,27 @@ class TestServer <Test::Unit::TestCase
|
||||
].each do |a|
|
||||
#try to make a new blank disk
|
||||
system_architecture=a[0]
|
||||
image_name=a[1]
|
||||
volume_name=a[1]
|
||||
track_count=a[2]
|
||||
sector_length=a[3]
|
||||
image_full_path="#{TEST_IMAGES_DIR}\\#{image_name}"
|
||||
image_full_path="#{TEST_IMAGES_DIR}\\#{volume_name}"
|
||||
File.delete(image_full_path) if File.exist?(image_full_path)
|
||||
create_volume_request_msg=TNDP::CreateVolumeRequestMessage.new({:volume_name=>image_name,:system_architecture=>system_architecture,:track_count=>track_count,:sector_length=>sector_length})
|
||||
create_volume_request_msg=TNDP::CreateVolumeRequestMessage.new({:volume_name=>volume_name,:system_architecture=>system_architecture,:track_count=>track_count,:sector_length=>sector_length})
|
||||
create_volume_response_msg=send_request_and_get_response(create_volume_request_msg)
|
||||
assert_equal(TNDP::CreateVolumeResponseMessage::OPCODE,create_volume_response_msg.opcode,"init volume request message should have correct opcode")
|
||||
assert_equal(TNDP::CreateVolumeResponseMessage::OPCODE,create_volume_response_msg.opcode,"init volume response message should have correct opcode")
|
||||
assert_equal(system_architecture,create_volume_response_msg.system_architecture)
|
||||
assert(File.exist?(image_full_path),"file just created should exist at #{image_full_path}")
|
||||
sector_data=([system_architecture.to_s,volume_name,track_count,sector_length].pack("Z12Z30CC")*200)[0,sector_length]
|
||||
track_no=track_count-1
|
||||
sector_no=1
|
||||
sector_write_request_msg=TNDP::SectorWriteRequestMessage.new({:track_no=>track_no,:sector_no=>sector_no,:sector_length=>sector_length,:volume_name=>volume_name,:sector_data=>sector_data})
|
||||
sector_write_response_msg=send_request_and_get_response(sector_write_request_msg)
|
||||
assert_equal(TNDP::SectorWriteResponseMessage::OPCODE,sector_write_response_msg.opcode,"sector write response message should have correct opcode")
|
||||
|
||||
file_system_image=RipXplore.best_fit_from_filename(image_full_path)
|
||||
assert_equal(track_count,file_system_image.track_count,"file just created should have correct number of tracks")
|
||||
assert_equal(sector_data,file_system_image.get_sector(track_no,sector_no),"file just created should have sector data set correctly")
|
||||
|
||||
end
|
||||
raise "done"
|
||||
#test every combination of host and file system
|
||||
|
Loading…
x
Reference in New Issue
Block a user