Skip to content

Commit

Permalink
[SPARK-4169] [Core] Accommodate non-English Locales in unit tests
Browse files Browse the repository at this point in the history
For me the core tests failed because there are two locale dependent parts in the code.
Look at the Jira ticket for details.

Why is it necessary to check the exception message in isBindCollision in
https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/util/Utils.scala#L1686
?

Author: Niklas Wilcke <[email protected]>

Closes #3036 from numbnut/core-test-fix and squashes the following commits:

1fb0d04 [Niklas Wilcke] Fixing locale dependend code and tests

(cherry picked from commit ed8bf1e)
Signed-off-by: Andrew Or <[email protected]>
  • Loading branch information
Niklas Wilcke authored and Andrew Or committed Nov 10, 2014
1 parent 78cd3ab commit dc38def
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 12 deletions.
2 changes: 1 addition & 1 deletion core/src/main/scala/org/apache/spark/util/Utils.scala
Original file line number Diff line number Diff line change
Expand Up @@ -1528,7 +1528,7 @@ private[spark] object Utils extends Logging {
def isBindCollision(exception: Throwable): Boolean = {
exception match {
case e: BindException =>
if (e.getMessage != null && e.getMessage.contains("Address already in use")) {
if (e.getMessage != null) {
return true
}
isBindCollision(e.getCause)
Expand Down
25 changes: 14 additions & 11 deletions core/src/test/scala/org/apache/spark/util/UtilsSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import scala.util.Random
import java.io.{File, ByteArrayOutputStream, ByteArrayInputStream, FileOutputStream}
import java.net.{BindException, ServerSocket, URI}
import java.nio.{ByteBuffer, ByteOrder}
import java.text.DecimalFormatSymbols
import java.util.Locale

import com.google.common.base.Charsets
import com.google.common.io.Files
Expand Down Expand Up @@ -101,14 +103,16 @@ class UtilsSuite extends FunSuite {
val hour = minute * 60
def str = Utils.msDurationToString(_)

val sep = new DecimalFormatSymbols(Locale.getDefault()).getDecimalSeparator()

assert(str(123) === "123 ms")
assert(str(second) === "1.0 s")
assert(str(second + 462) === "1.5 s")
assert(str(hour) === "1.00 h")
assert(str(minute) === "1.0 m")
assert(str(minute + 4 * second + 34) === "1.1 m")
assert(str(10 * hour + minute + 4 * second) === "10.02 h")
assert(str(10 * hour + 59 * minute + 59 * second + 999) === "11.00 h")
assert(str(second) === "1" + sep + "0 s")
assert(str(second + 462) === "1" + sep + "5 s")
assert(str(hour) === "1" + sep + "00 h")
assert(str(minute) === "1" + sep + "0 m")
assert(str(minute + 4 * second + 34) === "1" + sep + "1 m")
assert(str(10 * hour + minute + 4 * second) === "10" + sep + "02 h")
assert(str(10 * hour + 59 * minute + 59 * second + 999) === "11" + sep + "00 h")
}

test("reading offset bytes of a file") {
Expand Down Expand Up @@ -271,12 +275,11 @@ class UtilsSuite extends FunSuite {
assert(!Utils.isBindCollision(new Exception))
assert(!Utils.isBindCollision(new Exception(new Exception)))
assert(!Utils.isBindCollision(new Exception(new BindException)))
assert(!Utils.isBindCollision(new Exception(new BindException("Random message"))))

// Positives
val be = new BindException("Address already in use")
val be1 = new Exception(new BindException("Address already in use"))
val be2 = new Exception(new Exception(new BindException("Address already in use")))
val be = new BindException("Random Message")
val be1 = new Exception(new BindException("Random Message"))
val be2 = new Exception(new Exception(new BindException("Random Message")))
assert(Utils.isBindCollision(be))
assert(Utils.isBindCollision(be1))
assert(Utils.isBindCollision(be2))
Expand Down

0 comments on commit dc38def

Please sign in to comment.