Show More
Commit Description:
added rspec test for grader_message...
Commit Description:
added rspec test for grader_message git-svn-id: http://theory.cpe.ku.ac.th/grader/web/trunk@387 6386c4cd-e34a-4fa8-8920-d93eb39b512e
File last commit:
Show/Diff file:
Action:
spec/models/grader_message_spec.rb | 119 lines | 4.0 KiB | text/x-ruby | RubyLexer |
require File.dirname(__FILE__) + '/../spec_helper'
describe GraderMessage do
def add_submission_with_id(id)
submission = stub(Submission, :id => id)
GraderMessage.create_grade_submission("exam",submission)
end
before(:each) do
GraderMessage.destroy_all
end
it "should return nil when there is no messages to me" do
GraderMessage.create_message(1,0)
GraderMessage.get_message_for(2).should == nil
end
it "should return a messages directed to me" do
GraderMessage.create_message(1,0)
GraderMessage.get_message_for(2).should == nil
end
it "should return a messages directed to me, in order of creation" do
msg1 = GraderMessage.create_message(1,0)
msg2 = GraderMessage.create_message(2,2)
msg3 = GraderMessage.create_message(1,2)
GraderMessage.get_message_for(1).id.should == msg1.id
GraderMessage.get_message_for(1).id.should == msg3.id
end
it "should not return a messages directed to me if the command is not on my list of accepting commands" do
msg1 = GraderMessage.create_message(1,GraderMessage::GRADE_SUBMISSION)
msg2 = GraderMessage.create_message(1,GraderMessage::STOP)
GraderMessage.get_message_for(1,[GraderMessage::GRADE_TEST_REQUEST]).should == nil
end
it "should return a messages directed to me if the command is on my list of accepting commands" do
msg1 = GraderMessage.create_message(1,0)
msg2 = GraderMessage.create_message(1,2)
msg3 = GraderMessage.create_message(2,2)
GraderMessage.get_message_for(1,[2]).id.should == msg2.id
GraderMessage.get_message_for(1,[2]).should == nil
end
it "should return a message directed to anyone when I'm requesting" do
msg1 = GraderMessage.create_message(:any,0)
GraderMessage.get_message_for(1).id.should == msg1.id
end
it "should return a messages directed to anyone only if the command is on my list of accepting commands" do
msg1 = GraderMessage.create_message(:any,0)
GraderMessage.get_message_for(1,[1]).should == nil
msg2 = GraderMessage.create_message(:any,1)
GraderMessage.get_message_for(1,[1]).id.should == msg2.id
end
it "should return messages directed to anyone to many graders in order of requests" do
msg1 = GraderMessage.create_message(:any,0)
msg2 = GraderMessage.create_message(:any,2)
msg3 = GraderMessage.create_message(:any,2)
GraderMessage.get_message_for(1).id.should == msg1.id
GraderMessage.get_message_for(2).id.should == msg2.id
GraderMessage.get_message_for(1).id.should == msg3.id
end
it "should return messages directed to anyone to graders accepting those commands in order of requests" do
msg1 = GraderMessage.create_message(:any,0)
msg2 = GraderMessage.create_message(:any,1)
msg3 = GraderMessage.create_message(:any,2)
msg4 = GraderMessage.create_message(:any,2)
msg5 = GraderMessage.create_message(:any,3)
GraderMessage.get_message_for(1).id.should == msg1.id
GraderMessage.get_message_for(2,[2]).id.should == msg3.id
GraderMessage.get_message_for(1,[3]).id.should == msg5.id
GraderMessage.get_message_for(2).id.should == msg2.id
GraderMessage.get_message_for(1).id.should == msg4.id
end
it "should get all messages dispatched when there are many concurrent processes" do
n = 100
msg = []
n.times do |i|
msg << GraderMessage.create_message(:any,i)
end
#puts "#{n} messages created"
t = 10 # use 10 threads
ths = []
t.times do |i|
fork do
#puts "I'm the #{i+1}-th process."
begin
m = GraderMessage.get_message_for(i)
#puts "#{i+1} got #{m.id}" if m
sleep 0.1
end while m!=nil
#puts "The #{i+1}-th process terminated."
exit 0
end
end
t.times do
Process.wait
end
# for some reason the connection is lost at this point.
GraderMessage.connection.reconnect!
# check that all messages have been processed
GraderMessage.find(:all) do |msg|
msg.taken_grader_process.should != nil
end
end
end