Skip to content

Commit

Permalink
Fix META_INIT and update specs
Browse files Browse the repository at this point in the history
  • Loading branch information
jmthomas committed Aug 17, 2017
1 parent 91d3c41 commit d50e262
Show file tree
Hide file tree
Showing 2 changed files with 167 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/cosmos/system/system.rb
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ def initialize(filename = nil)
@limits_set = :DEFAULT
@use_utc = false
@additional_md5_files = []
@meta_init_filename = nil

@ports = {}
@ports['CTS_API'] = 7777
Expand Down Expand Up @@ -150,7 +151,6 @@ def initialize(filename = nil)

@initial_filename = filename
@initial_config = nil
@meta_init_filename = nil
@@instance = self
end

Expand Down
166 changes: 166 additions & 0 deletions spec/system/system_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
require 'cosmos'
require 'cosmos/system/system'
require 'tempfile'
require 'fileutils'

module Cosmos

Expand Down Expand Up @@ -50,6 +51,110 @@ module Cosmos
# Don't check the actual paths but just that they exist
expect(System.paths.keys).to eql %w(LOGS TMP SAVED_CONFIG TABLES HANDBOOKS PROCEDURES SEQUENCES)
end

context "initializing SYSTEM META" do
before(:all) do
FileUtils.mv(File.join(@config_targets, 'SYSTEM', 'cmd_tlm', 'meta_cmd_tlm.txt'), Dir.pwd)
end
after(:all) do
FileUtils.mv(File.join(Dir.pwd, 'meta_cmd_tlm.txt'), File.join(@config_targets, 'SYSTEM', 'cmd_tlm'))
end

it "initializes the SYSTEM META with no definitions" do
tlm = System.telemetry.packet("SYSTEM", "META")
expect(tlm.read("PKTID")).to_not be_nil
expect(tlm.read("CONFIG")).to_not be_nil
expect(tlm.read("COSMOS_VERSION")).to_not be_nil
expect(tlm.read("RUBY_VERSION")).to_not be_nil
expect(tlm.read("USER_VERSION")).to_not be_nil
cmd = System.commands.packet("SYSTEM", "META")
expect(cmd.read("PKTID")).to eql tlm.read("PKTID")
expect(cmd.read("CONFIG")).to eql tlm.read("CONFIG")
expect(cmd.read("COSMOS_VERSION")).to eql tlm.read("COSMOS_VERSION")
expect(cmd.read("RUBY_VERSION")).to eql tlm.read("RUBY_VERSION")
expect(cmd.read("USER_VERSION")).to eql tlm.read("USER_VERSION")
end

it "correctly defines COMMAND SYSTEM META" do
file = File.open(File.join(@config_targets, 'SYSTEM', 'cmd_tlm', 'meta_cmd_tlm.txt'), 'w')
file.puts "TELEMETRY SYSTEM META BIG_ENDIAN"
file.puts "APPEND_ID_ITEM PKTID 8 UINT 1"
file.puts "APPEND_ITEM CONFIG 256 STRING"
file.puts "APPEND_ITEM COSMOS_VERSION 240 STRING"
file.puts "APPEND_ITEM USER_VERSION 240 STRING"
file.puts "APPEND_ITEM RUBY_VERSION 240 STRING"
file.puts "COMMAND SYSTEM META BIG_ENDIAN"
file.puts "APPEND_ID_PARAMETER PKTID 8 UINT 1 1 1"
# None of the rest are defined
file.close

expect(Logger).to receive(:error) do |msg|
expect(msg).to eql "SYSTEM META not defined or defined incorrectly - defaulting"
end

tf = Tempfile.new('unittest')
tf.puts("AUTO_DECLARE_TARGETS")
tf.close
System.class_variable_set(:@@instance, nil)
System.new(tf.path)
tlm = System.telemetry.packet("SYSTEM", "META")
expect(tlm.read("PKTID")).to_not be_nil
expect(tlm.read("CONFIG")).to_not be_nil
expect(tlm.read("COSMOS_VERSION")).to_not be_nil
expect(tlm.read("RUBY_VERSION")).to_not be_nil
expect(tlm.read("USER_VERSION")).to_not be_nil
cmd = System.commands.packet("SYSTEM", "META")
expect(cmd.read("PKTID")).to eql tlm.read("PKTID")
expect(cmd.read("CONFIG")).to eql tlm.read("CONFIG")
expect(cmd.read("COSMOS_VERSION")).to eql tlm.read("COSMOS_VERSION")
expect(cmd.read("RUBY_VERSION")).to eql tlm.read("RUBY_VERSION")
expect(cmd.read("USER_VERSION")).to eql tlm.read("USER_VERSION")
tf.unlink
end

it "correctly defines TELEMETRY SYSTEM META" do
file = File.open(File.join(@config_targets, 'SYSTEM', 'cmd_tlm', 'meta.txt'), 'w')
file.puts "TELEMETRY SYSTEM META BIG_ENDIAN"
file.puts "APPEND_ID_ITEM PKTID 8 UINT 1"
file.puts "APPEND_ITEM CONFIG 256 STRING"
file.puts "APPEND_ITEM COSMOS_VERSION 240 STRING"
file.puts "APPEND_ITEM USER_VERSION 240 STRING"
file.puts "APPEND_ITEM RUBY_VERSION 200 STRING" # Error in the RUBY_VERSION length
file.puts "COMMAND SYSTEM META BIG_ENDIAN"
file.puts "APPEND_ID_PARAMETER PKTID 8 UINT 1 1 1"
file.puts "APPEND_PARAMETER CONFIG 256 STRING ''"
file.puts "APPEND_PARAMETER COSMOS_VERSION 240 STRING ''"
file.puts "APPEND_PARAMETER USER_VERSION 240 STRING ''"
file.puts "APPEND_PARAMETER RUBY_VERSION 240 STRING ''"
file.puts "APPEND_PARAMETER TEST 512 STRING ''"
file.puts "APPEND_PARAMETER ID 32 UINT MIN MAX 0"
file.close

expect(Logger).to receive(:error) do |msg|
expect(msg).to eql "SYSTEM META not defined or defined incorrectly - defaulting"
end

tf = Tempfile.new('unittest')
tf.puts("AUTO_DECLARE_TARGETS")
tf.close
System.class_variable_set(:@@instance, nil)
System.new(tf.path)
tlm = System.telemetry.packet("SYSTEM", "META")
expect(tlm.read("PKTID")).to_not be_nil
expect(tlm.read("CONFIG")).to_not be_nil
expect(tlm.read("COSMOS_VERSION")).to_not be_nil
expect(tlm.get_item("COSMOS_VERSION").bit_size).to eql(240)
expect(tlm.read("RUBY_VERSION")).to_not be_nil
expect(tlm.read("USER_VERSION")).to_not be_nil
cmd = System.commands.packet("SYSTEM", "META")
expect(cmd.read("PKTID")).to eql tlm.read("PKTID")
expect(cmd.read("CONFIG")).to eql tlm.read("CONFIG")
expect(cmd.read("COSMOS_VERSION")).to eql tlm.read("COSMOS_VERSION")
expect(cmd.read("RUBY_VERSION")).to eql tlm.read("RUBY_VERSION")
expect(cmd.read("USER_VERSION")).to eql tlm.read("USER_VERSION")
tf.unlink
end
end
end

describe "System.commands" do
Expand Down Expand Up @@ -642,6 +747,67 @@ module Cosmos
end
end

context "with META_INIT" do
it "takes 1 parameters" do
tf = Tempfile.new('unittest')
tf.puts("META_INIT")
tf.close
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for META_INIT./)
tf.unlink

tf = Tempfile.new('unittest')
tf.puts("META_INIT 1 2")
tf.close
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for META_INIT./)
tf.unlink
end

it "populates the SYSTEM META packet with the file" do
FileUtils.mkdir_p(File.join(@config_targets, 'SYSTEM', 'cmd_tlm'))
file = File.open(File.join(@config_targets, 'SYSTEM', 'cmd_tlm', 'meta.txt'), 'w')
file.puts "TELEMETRY SYSTEM META BIG_ENDIAN"
file.puts "APPEND_ID_ITEM PKTID 8 UINT 1"
file.puts "APPEND_ITEM CONFIG 256 STRING"
file.puts "APPEND_ITEM COSMOS_VERSION 240 STRING"
file.puts "APPEND_ITEM USER_VERSION 240 STRING"
file.puts "APPEND_ITEM RUBY_VERSION 240 STRING"
file.puts "APPEND_ITEM TEST 512 STRING"
file.puts "APPEND_ITEM ID 32 UINT"
file.puts "COMMAND SYSTEM META BIG_ENDIAN"
file.puts "APPEND_ID_PARAMETER PKTID 8 UINT 1 1 1"
file.puts "APPEND_PARAMETER CONFIG 256 STRING ''"
file.puts "APPEND_PARAMETER COSMOS_VERSION 240 STRING ''"
file.puts "APPEND_PARAMETER USER_VERSION 240 STRING ''"
file.puts "APPEND_PARAMETER RUBY_VERSION 240 STRING ''"
file.puts "APPEND_PARAMETER TEST 512 STRING ''"
file.puts "APPEND_PARAMETER ID 32 UINT MIN MAX 0"
file.close

meta = Tempfile.new('meta')
meta.puts("USER_VERSION 4.5")
meta.puts("TEST hello")
meta.puts("ID 123456789")
meta.close
tf = Tempfile.new('unittest')
tf.puts("AUTO_DECLARE_TARGETS")
tf.puts("META_INIT #{meta.path}")
tf.close
System.class_variable_set(:@@instance, nil)
System.new(tf.path)
tlm = System.telemetry.packet("SYSTEM", "META")
expect(tlm.read("USER_VERSION")).to eql '4.5'
expect(tlm.read("TEST")).to eql 'hello'
expect(tlm.read("ID")).to eql 123456789
cmd = System.commands.packet("SYSTEM", "META")
expect(cmd.read("USER_VERSION")).to eql tlm.read("USER_VERSION")
expect(cmd.read("TEST")).to eql tlm.read("TEST")
expect(cmd.read("ID")).to eql tlm.read("ID")
tf.unlink
meta.unlink
FileUtils.rm_rf(File.join(@config_targets, 'SYSTEM'))
end
end

context "with ADD_MD5_FILE" do
it "takes 1 parameters" do
tf = Tempfile.new('unittest')
Expand Down

0 comments on commit d50e262

Please sign in to comment.