Compare commits

..

No commits in common. "stream-javapackages-tools-201801-rhel-8.10.0" and "c8-stream-3.6" have entirely different histories.

6 changed files with 372 additions and 40 deletions

22
.gitignore vendored
View File

@ -1,21 +1 @@
/httpcomponents-core-4.1-src.tar.gz
/httpcomponents-core-4.1.1-src.tar.gz
/httpcomponents-core-4.1.2-src.tar.gz
/httpcomponents-core-4.1.3-src.tar.gz
httpcomponents-core-4.1.4-src.tar.gz
/httpcomponents-core-4.2.1-src.tar.gz
/httpcomponents-core-4.2.3-src.tar.gz
/httpcomponents-core-4.2.4-src.tar.gz
/httpcomponents-core-4.3-src.tar.gz
/httpcomponents-core-4.3.2-src.tar.gz
/httpcomponents-core-4.4-src.tar.gz
/httpcomponents-core-4.4.1-src.tar.gz
/httpcomponents-core-4.4.2-src.tar.gz
/httpcomponents-core-4.4.3-src.tar.gz
/httpcomponents-core-4.4.4-src.tar.gz
/httpcomponents-core-4.4.5-src.tar.gz
/httpcomponents-core-4.4.6-src.tar.gz
/httpcomponents-core-4.4.7-src.tar.gz
/httpcomponents-core-4.4.8-src.tar.gz
/httpcomponents-core-4.4.9-src.tar.gz
/httpcomponents-core-4.4.10-src.tar.gz
SOURCES/httpcomponents-core-4.4.12-src.tar.gz

View File

@ -0,0 +1 @@
c29457872eabc280f17f66d51cd76a6e079d7308 SOURCES/httpcomponents-core-4.4.12-src.tar.gz

View File

@ -0,0 +1,341 @@
From 85107ca9057cda2ed4d72ba1fd3c2c09be404af6 Mon Sep 17 00:00:00 2001
From: Mat Booth <mat.booth@redhat.com>
Date: Fri, 7 Dec 2018 19:50:08 +0000
Subject: [PATCH] Port to mockito 2
For details, see:
https://github.com/mockito/mockito/wiki/What%27s-new-in-Mockito-2#incompatible
---
.../impl/nio/pool/TestBasicNIOConnPool.java | 2 +-
.../apache/http/nio/pool/TestNIOConnPool.java | 68 +++++++++----------
.../nio/protocol/TestHttpAsyncService.java | 8 +--
3 files changed, 39 insertions(+), 39 deletions(-)
diff --git a/httpcore-nio/src/test/java/org/apache/http/impl/nio/pool/TestBasicNIOConnPool.java b/httpcore-nio/src/test/java/org/apache/http/impl/nio/pool/TestBasicNIOConnPool.java
index 25e2781cf..ee277c69d 100644
--- a/httpcore-nio/src/test/java/org/apache/http/impl/nio/pool/TestBasicNIOConnPool.java
+++ b/httpcore-nio/src/test/java/org/apache/http/impl/nio/pool/TestBasicNIOConnPool.java
@@ -115,7 +115,7 @@ public void testTimeoutOnLeaseRelease() throws Exception {
Mockito.when(sessionRequest.getAttachment()).thenReturn(host);
Mockito.when(reactor.connect(
Matchers.any(SocketAddress.class),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.eq(host),
Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest);
diff --git a/httpcore-nio/src/test/java/org/apache/http/nio/pool/TestNIOConnPool.java b/httpcore-nio/src/test/java/org/apache/http/nio/pool/TestNIOConnPool.java
index 9672db6db..20f230acb 100644
--- a/httpcore-nio/src/test/java/org/apache/http/nio/pool/TestNIOConnPool.java
+++ b/httpcore-nio/src/test/java/org/apache/http/nio/pool/TestNIOConnPool.java
@@ -176,7 +176,7 @@ public void testSuccessfulConnect() throws Exception {
final ConnectingIOReactor ioReactor = Mockito.mock(ConnectingIOReactor.class);
Mockito.when(ioReactor.connect(
Matchers.any(SocketAddress.class),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest);
final LocalSessionPool pool = new LocalSessionPool(ioReactor, 2, 10);
@@ -209,7 +209,7 @@ public void testFailedConnect() throws Exception {
final ConnectingIOReactor ioReactor = Mockito.mock(ConnectingIOReactor.class);
Mockito.when(ioReactor.connect(
Matchers.any(SocketAddress.class),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest);
final LocalSessionPool pool = new LocalSessionPool(ioReactor, 2, 10);
@@ -246,7 +246,7 @@ public void testCencelledConnect() throws Exception {
final ConnectingIOReactor ioReactor = Mockito.mock(ConnectingIOReactor.class);
Mockito.when(ioReactor.connect(
Matchers.any(SocketAddress.class),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest);
Mockito.when(ioReactor.getStatus()).thenReturn(IOReactorStatus.ACTIVE);
@@ -285,7 +285,7 @@ public void testTimeoutConnect() throws Exception {
final ConnectingIOReactor ioReactor = Mockito.mock(ConnectingIOReactor.class);
Mockito.when(ioReactor.connect(
Matchers.any(SocketAddress.class),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest);
final LocalSessionPool pool = new LocalSessionPool(ioReactor, 2, 10);
@@ -350,12 +350,12 @@ public void testLeaseRelease() throws Exception {
final ConnectingIOReactor ioReactor = Mockito.mock(ConnectingIOReactor.class);
Mockito.when(ioReactor.connect(
Matchers.eq(InetSocketAddress.createUnresolved("somehost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest1);
Mockito.when(ioReactor.connect(
Matchers.eq(InetSocketAddress.createUnresolved("otherhost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest2);
@@ -424,12 +424,12 @@ public void testMaxLimits() throws Exception {
final ConnectingIOReactor ioReactor = Mockito.mock(ConnectingIOReactor.class);
Mockito.when(ioReactor.connect(
Matchers.eq(InetSocketAddress.createUnresolved("somehost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest1);
Mockito.when(ioReactor.connect(
Matchers.eq(InetSocketAddress.createUnresolved("otherhost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest2);
@@ -482,7 +482,7 @@ public void testMaxLimits() throws Exception {
Assert.assertFalse(future9.isDone());
Mockito.verify(ioReactor, Mockito.times(3)).connect(
- Matchers.any(SocketAddress.class), Matchers.any(SocketAddress.class),
+ Matchers.any(SocketAddress.class), Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
pool.release(entry4, true);
@@ -494,7 +494,7 @@ public void testMaxLimits() throws Exception {
Assert.assertTrue(future9.isDone());
Mockito.verify(ioReactor, Mockito.times(4)).connect(
- Matchers.any(SocketAddress.class), Matchers.any(SocketAddress.class),
+ Matchers.any(SocketAddress.class), Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
}
@@ -523,12 +523,12 @@ public void testConnectionRedistributionOnTotalMaxLimit() throws Exception {
final ConnectingIOReactor ioReactor = Mockito.mock(ConnectingIOReactor.class);
Mockito.when(ioReactor.connect(
Matchers.eq(InetSocketAddress.createUnresolved("somehost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest1, sessionRequest2, sessionRequest1);
Mockito.when(ioReactor.connect(
Matchers.eq(InetSocketAddress.createUnresolved("otherhost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest3, sessionRequest4, sessionRequest3);
@@ -544,12 +544,12 @@ public void testConnectionRedistributionOnTotalMaxLimit() throws Exception {
Mockito.verify(ioReactor, Mockito.times(2)).connect(
Matchers.eq(InetSocketAddress.createUnresolved("somehost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
Mockito.verify(ioReactor, Mockito.never()).connect(
Matchers.eq(InetSocketAddress.createUnresolved("otherhost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
pool.requestCompleted(sessionRequest1);
@@ -575,12 +575,12 @@ public void testConnectionRedistributionOnTotalMaxLimit() throws Exception {
Mockito.verify(ioReactor, Mockito.times(2)).connect(
Matchers.eq(InetSocketAddress.createUnresolved("somehost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
Mockito.verify(ioReactor, Mockito.times(2)).connect(
Matchers.eq(InetSocketAddress.createUnresolved("otherhost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
pool.requestCompleted(sessionRequest3);
@@ -603,12 +603,12 @@ public void testConnectionRedistributionOnTotalMaxLimit() throws Exception {
Mockito.verify(ioReactor, Mockito.times(2)).connect(
Matchers.eq(InetSocketAddress.createUnresolved("somehost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
Mockito.verify(ioReactor, Mockito.times(2)).connect(
Matchers.eq(InetSocketAddress.createUnresolved("otherhost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
pool.release(entry3, true);
@@ -616,12 +616,12 @@ public void testConnectionRedistributionOnTotalMaxLimit() throws Exception {
Mockito.verify(ioReactor, Mockito.times(3)).connect(
Matchers.eq(InetSocketAddress.createUnresolved("somehost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
Mockito.verify(ioReactor, Mockito.times(2)).connect(
Matchers.eq(InetSocketAddress.createUnresolved("otherhost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
pool.requestCompleted(sessionRequest1);
@@ -643,12 +643,12 @@ public void testConnectionRedistributionOnTotalMaxLimit() throws Exception {
Mockito.verify(ioReactor, Mockito.times(3)).connect(
Matchers.eq(InetSocketAddress.createUnresolved("somehost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
Mockito.verify(ioReactor, Mockito.times(2)).connect(
Matchers.eq(InetSocketAddress.createUnresolved("otherhost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
totals = pool.getTotalStats();
@@ -677,7 +677,7 @@ public void testStatefulConnectionRedistributionOnPerRouteMaxLimit() throws Exce
final ConnectingIOReactor ioReactor = Mockito.mock(ConnectingIOReactor.class);
Mockito.when(ioReactor.connect(
Matchers.eq(InetSocketAddress.createUnresolved("somehost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest1, sessionRequest2, sessionRequest3);
@@ -690,7 +690,7 @@ public void testStatefulConnectionRedistributionOnPerRouteMaxLimit() throws Exce
Mockito.verify(ioReactor, Mockito.times(2)).connect(
Matchers.eq(InetSocketAddress.createUnresolved("somehost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
pool.requestCompleted(sessionRequest1);
@@ -725,7 +725,7 @@ public void testStatefulConnectionRedistributionOnPerRouteMaxLimit() throws Exce
Mockito.verify(ioReactor, Mockito.times(2)).connect(
Matchers.eq(InetSocketAddress.createUnresolved("somehost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
pool.release(entry3, true);
@@ -742,7 +742,7 @@ public void testStatefulConnectionRedistributionOnPerRouteMaxLimit() throws Exce
Mockito.verify(ioReactor, Mockito.times(3)).connect(
Matchers.eq(InetSocketAddress.createUnresolved("somehost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
Mockito.verify(ioSession2).close();
@@ -765,7 +765,7 @@ public void testCreateNewIfExpired() throws Exception {
final ConnectingIOReactor ioReactor = Mockito.mock(ConnectingIOReactor.class);
Mockito.when(ioReactor.connect(
Matchers.eq(InetSocketAddress.createUnresolved("somehost", 80)),
- Matchers.any(SocketAddress.class),
+ Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest1);
@@ -774,7 +774,7 @@ public void testCreateNewIfExpired() throws Exception {
final Future<LocalPoolEntry> future1 = pool.lease("somehost", null);
Mockito.verify(ioReactor, Mockito.times(1)).connect(
- Matchers.any(SocketAddress.class), Matchers.any(SocketAddress.class),
+ Matchers.any(SocketAddress.class), Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
pool.requestCompleted(sessionRequest1);
@@ -794,7 +794,7 @@ public void testCreateNewIfExpired() throws Exception {
Mockito.verify(ioSession1).close();
Mockito.verify(ioReactor, Mockito.times(2)).connect(
- Matchers.any(SocketAddress.class), Matchers.any(SocketAddress.class),
+ Matchers.any(SocketAddress.class), Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class));
final PoolStats totals = pool.getTotalStats();
@@ -823,7 +823,7 @@ public void testCloseExpired() throws Exception {
final ConnectingIOReactor ioReactor = Mockito.mock(ConnectingIOReactor.class);
Mockito.when(ioReactor.connect(
- Matchers.any(SocketAddress.class), Matchers.any(SocketAddress.class),
+ Matchers.any(SocketAddress.class), Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest1, sessionRequest2);
@@ -879,7 +879,7 @@ public void testCloseIdle() throws Exception {
final ConnectingIOReactor ioReactor = Mockito.mock(ConnectingIOReactor.class);
Mockito.when(ioReactor.connect(
- Matchers.any(SocketAddress.class), Matchers.any(SocketAddress.class),
+ Matchers.any(SocketAddress.class), Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest1, sessionRequest2);
@@ -944,7 +944,7 @@ public void testLeaseRequestTimeout() throws Exception {
final ConnectingIOReactor ioReactor = Mockito.mock(ConnectingIOReactor.class);
Mockito.when(ioReactor.connect(
- Matchers.any(SocketAddress.class), Matchers.any(SocketAddress.class),
+ Matchers.any(SocketAddress.class), Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest1);
@@ -1048,7 +1048,7 @@ public void testLeaseRequestCanceled() throws Exception {
final ConnectingIOReactor ioReactor = Mockito.mock(ConnectingIOReactor.class);
Mockito.when(ioReactor.connect(
- Matchers.any(SocketAddress.class), Matchers.any(SocketAddress.class),
+ Matchers.any(SocketAddress.class), Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest1);
Mockito.when(ioReactor.getStatus()).thenReturn(IOReactorStatus.ACTIVE);
@@ -1082,7 +1082,7 @@ public void testLeaseRequestCanceledWhileConnecting() throws Exception {
final ConnectingIOReactor ioReactor = Mockito.mock(ConnectingIOReactor.class);
Mockito.when(ioReactor.connect(
- Matchers.any(SocketAddress.class), Matchers.any(SocketAddress.class),
+ Matchers.any(SocketAddress.class), Matchers.<SocketAddress>isNull(),
Matchers.any(), Matchers.any(SessionRequestCallback.class))).
thenReturn(sessionRequest1);
Mockito.when(ioReactor.getStatus()).thenReturn(IOReactorStatus.ACTIVE);
diff --git a/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncService.java b/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncService.java
index dcb92a629..947b05fa9 100644
--- a/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncService.java
+++ b/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncService.java
@@ -502,8 +502,8 @@ public void testEntityEnclosingRequestContinueWithoutVerification() throws Excep
Mockito.verify(this.conn).submitResponse(Matchers.argThat(new ArgumentMatcher<HttpResponse>() {
@Override
- public boolean matches(final Object argument) {
- final int status = ((HttpResponse) argument).getStatusLine().getStatusCode();
+ public boolean matches(final HttpResponse argument) {
+ final int status = argument.getStatusLine().getStatusCode();
return status == 100;
}
@@ -1019,8 +1019,8 @@ public void testResponseContinue() throws Exception {
Mockito.verify(this.conn).submitResponse(Matchers.argThat(new ArgumentMatcher<HttpResponse>() {
@Override
- public boolean matches(final Object argument) {
- final int status = ((HttpResponse) argument).getStatusLine().getStatusCode();
+ public boolean matches(final HttpResponse argument) {
+ final int status = argument.getStatusLine().getStatusCode();
return status == 100;
}
--
2.21.0

View File

@ -1,25 +1,22 @@
Name: httpcomponents-core
Summary: Set of low level Java HTTP transport components for HTTP services
Version: 4.4.10
Version: 4.4.12
Release: 3%{?dist}
License: ASL 2.0
URL: http://hc.apache.org/
Source0: http://www.apache.org/dist/httpcomponents/httpcore/source/httpcomponents-core-%{version}-src.tar.gz
# Expired test certificates. Backported from upstream commit 8caeb927a.
Patch0: 0001-Re-generated-expired-test-certificates.patch
Patch0: 0001-Port-to-mockito-2.patch
BuildArch: noarch
BuildRequires: maven-local
BuildRequires: maven-local-openjdk8
BuildRequires: mvn(commons-logging:commons-logging)
BuildRequires: mvn(junit:junit)
BuildRequires: mvn(org.apache.commons:commons-lang3)
BuildRequires: mvn(org.apache.felix:maven-bundle-plugin)
BuildRequires: mvn(org.apache.httpcomponents:httpcomponents-parent:pom:)
BuildRequires: mvn(org.codehaus.mojo:build-helper-maven-plugin)
BuildRequires: mvn(org.mockito:mockito-core)
%description
HttpCore is a set of low level HTTP transport components that can be
used to build custom client and server side HTTP services with a
@ -33,16 +30,11 @@ appropriate for high latency scenarios where raw data throughput is
less important than the ability to handle thousands of simultaneous
HTTP connections in a resource efficient manner.
%package javadoc
Summary: API documentation for %{name}
%description javadoc
%{summary}.
%{?module_package}
%{?javadoc_package}
%prep
%setup -q
%patch0 -p1
# Random test failures on ARM -- 100 ms sleep is not eneough on this
@ -89,13 +81,32 @@ done
%install
%mvn_install
%files -f .mfiles
%doc LICENSE.txt NOTICE.txt README.txt RELEASE_NOTES.txt
%files javadoc -f .mfiles-javadoc
%doc LICENSE.txt NOTICE.txt
%files -n %{?module_prefix}%{name} -f .mfiles
%license LICENSE.txt NOTICE.txt
%doc README.txt RELEASE_NOTES.txt
%changelog
* Sat Jan 25 2020 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.4.12-3
- Build with OpenJDK 8
* Tue Nov 05 2019 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.4.12-2
- Mass rebuild for javapackages-tools 201902
* Mon Sep 16 2019 Marian Koncek <mkoncek@redhat.com> - 4.4.12-1
- Update to upstream version 4.4.12
* Fri May 24 2019 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.4.11-2
- Mass rebuild for javapackages-tools 201901
* Mon May 13 2019 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.4.11-1
- Update to upstream version 4.4.11
* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 4.4.10-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Fri Dec 07 2018 Mat Booth <mat.booth@redhat.com> - 4.4.10-4
- Add patch to allow building with mockito 2
* Mon Jul 23 2018 Michael Simacek <msimacek@redhat.com> - 4.4.10-3
- Fix failing tests

View File

@ -1 +0,0 @@
SHA512 (httpcomponents-core-4.4.10-src.tar.gz) = 3e209b86395d784ccee04cc57755cbf00aceb6223e017e60d711e5f967badf3e193150d372c1877551960d6b4252c704f3a8062aaf1a2d83785954ea53f1a379