[Title] build-cli register command check password before uplaod file
authorhataejun <taejun.ha@samsung.com>
Tue, 5 Mar 2013 08:39:18 +0000 (17:39 +0900)
committerhataejun <taejun.ha@samsung.com>
Tue, 5 Mar 2013 08:39:18 +0000 (17:39 +0900)
[Type]
[Module]
[Priority]
[Jira#]
[Redmine#] 6717
[Problem]
[Cause]
[Solution]
[TestCase]

build-cli
src/build_server/BuildServerException.rb
src/build_server/SocketJobRequestListener.rb

index aae884d4f60184f9821f83fc732727d26f38b678..e6120dbcf392aa4a5c6ba7a5b27c8f77e3250a66 100755 (executable)
--- a/build-cli
+++ b/build-cli
@@ -138,6 +138,22 @@ def query_job_list(ip, port)
        end
 end
 
+def upload_request(bs_ip, bs_port, dock, transporter, package )
+       client = BuildCommClient.create( bs_ip, bs_port, nil, 0 )
+       if client.nil? then
+               raise RuntimeError, "Can't access server #{bs_ip}:#{bs_port}"
+       end
+       msg = "UPLOAD|#{dock}"
+       client.send( msg )
+       result = client.send_file(package, transporter)
+       client.terminate
+       if not result then
+               raise RuntimeError, "Uploading file failed!.. #{result}"
+       else 
+               puts "Uploading file success!.. #{result}"
+       end
+end
+
 
 # if "--os" is not specified, use pe
 if option[:os].nil? then
@@ -297,34 +313,38 @@ begin
                        transporter = FileTransferDirect.new( nil )
                end
 
-               # upload
-               client = BuildCommClient.create( bs_ip, bs_port, nil, 0 )
-               if client.nil? then
-                       puts "Can't access server #{bs_ip}:#{bs_port}"
-                       exit(-1)
-               end
-               dock = Utils.create_uniq_name()
-               msg = "UPLOAD|#{dock}"
-               client.send( msg )
-               result = client.send_file(option[:package], transporter)
-               client.terminate
-               if not result then
-                       puts "Uploading file failed!.. #{option[:package]}"
-                       exit(-1)
-               end
-
                # register
                client = BuildCommClient.create( bs_ip, bs_port, nil, 0 )
                if client.nil? then
                        puts "Can't access server #{bs_ip}:#{bs_port}"
                        exit(-1)
                end
-               client.send("REGISTER|BINARY|#{File.basename(option[:package])}|#{option[:passwd]}|#{dock}|#{option[:dist]}|#{option[:user]}|#{option[:noreverse]}")
-               if not client.print_stream then
-                       puts "ERROR: #{client.get_error_msg()}"
-               end
-               client.terminate
 
+               begin
+                       dock = Utils.create_uniq_name()
+                       client.send("REGISTER|BINARY|#{File.basename(option[:package])}|#{option[:passwd]}|#{dock}|#{option[:dist]}|#{option[:user]}|#{option[:noreverse]}")
+                       client.read_lines do |line|
+                               if line.eql?("WAITFORUPLOAD") then
+                                       # upload
+                                       thread = Thread.new do
+                                               begin 
+                                                       upload_request(bs_ip, bs_port, dock, transporter, option[:package])
+                                               rescue => e
+                                                       puts "Transfering file failed!"
+                                                       puts e.message
+                                                       puts e.backtrace.inspect
+                                               end
+                                       end
+            
+                                       thread.join
+                                       client.send("REGISTERCONTINUE")
+                               else
+                                       puts line
+                               end
+                       end
+               ensure
+                       client.terminate
+               end
        else
                raise RuntimeError, "input option incorrect : #{option[:cmd]}"
        end
index eb6033d51e7f2e32016e7fdea6583a2469f4944e..8c98f0808430f46fb8e654993d89e955ba2967bc 100644 (file)
@@ -15,6 +15,7 @@ class BuildServerException < Exception
                "ERR013" => "Project from file-name/distribution not found!",
                "ERR014" => "Job cancel failed!",
                "ERR015" => "Server password not matched!",
+               "ERR016" => "Can't received register file!",
 
                "ERR900" => "Cancel event received!",
                "ERR901" => "Job already upload status. Cancel failed!"
index 0bd69aa7ad08bd675915904b0d3d12e53fc24d8c..bb1ecd696af6b9f25c1a3860fe8ff565f47a434d 100644 (file)
@@ -771,14 +771,21 @@ class SocketJobRequestListener
        def handle_cmd_register( line, req )
                @log.info "Received REQ: #{line}"
 
-               begin
-                       handle_cmd_register_internal( line, req )
-               rescue BuildServerException => e
-                       @log.error(e.message)
-                       BuildCommServer.send(req, e.err_message())
-                       BuildCommServer.send_end(req)
-                       BuildCommServer.disconnect(req)
+               Thread.new do
+                       begin
+                               handle_cmd_register_internal( line, req )
+                       rescue BuildServerException => e
+                               @log.error(e.message)
+                               BuildCommServer.send(req, e.err_message())
+                               BuildCommServer.send_end(req)
+                               BuildCommServer.disconnect(req)
+                       rescue => e
+                               @log.error "Transfering file failed!"
+                               @log.error e.message
+                               @log.error e.backtrace.inspect
+                       end
                end
+               
 
                @log.info "Handled REQ: #{line}"
        end
@@ -844,6 +851,15 @@ class SocketJobRequestListener
                        # check passwd
                        check_project_password(prj, passwd, req)
 
+                       # save thread and wait uplaod
+                       BuildCommServer.send(req, "WAITFORUPLOAD")
+                       req_line = req.gets
+                       if req_line.nil? or not req_line.strip.eql?("REGISTERCONTINUE") then 
+                               raise BuildServerException.new("ERR016"), req_line
+                       else
+                               @log.info "register file is received successfully"
+                       end
+
                        # create new job
                        @log.info "Received a request for uploading binaries : #{filename}"
                        new_job = create_new_upload_job( prj.name, filename, dock, dist_name, req )